у меня есть странная проблема... Я шел не в своем уме для нескольких прошлых часов... таймер, я вставил свой код winform (от панели инструментов), не отсчитает...
У меня есть таймеры на нескольких формах в моей программе, они все хорошо работают... Я пытаюсь сделать точно то же это это, это не отсчитает... Я выбираю его, перетаскиваю его на форме, включаю его, устанавливаю интервал и обрабатываю событие галочки..., и ничего не происходит..., я даже пытался поместить случайный код как messagebox.show в событии галочки только, чтобы видеть, происходит ли что-нибудь, и ничто!!! как я сказал, еще нескольких таймеров в моей программе (на других формах, не в той, которая я пытаюсь поместить этот таймер), и они все хорошо работают...
какие-либо предложения?
заранее спасибо!
Убедитесь, что вы запустили его, вызвав timer1.Start ()
разве таймер System.Windows.Forms.Timer не запускается на .enabled... в любом случае... я только что заставил его работать... я скопировал сгенерированный visual studio код из WINFORMNAME.designer.cs в WINFORMNAME.cs... я не знаю, как и почему, но это сработало...
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Enabled = true;
timer.Interval = 1000;
timer.Tick += new EventHandler(timer_Tick);
void timer_Tick(object sender, EventArgs e)
{
//do something
}
спасибо всем за ответы!
Я обнаружил, что если я останавливаю таймер из потока, не относящегося к UI, а затем запускаю его снова, я теряю хук события.
Я не знаю, каков "правильный" ответ, но это сработало для меня довольно хорошо:
public class BetterTimer : System.Windows.Forms.Timer
{
public BetterTimer():base()
{ base.Enabled = true; }
public BetterTimer(System.ComponentModel.IContainer container) : base(container)
{ base.Enabled = true; }
private bool _Enabled;
public override bool Enabled
{
get { return _Enabled; }
set { _Enabled = value; }
}
protected override void OnTick(System.EventArgs e)
{ if (this.Enabled) base.OnTick(e); }
}
Три вещи в этом подходе:
1) Переопределяя конструкторы, я гарантирую, что базовый таймер включен с самого начала.
2) Переопределяя "Enabled", я никогда не позволяю базовому таймеру стать отключенным, но интерфейс не меняется.
3) Переопределяя "OnTick", я позволяю переопределенному свойству Enabled решать, должно ли событие сработать или нет.
Start() и Stop() работают, устанавливая true и false для свойства Enabled, соответственно.
BTW - кто-нибудь знает, почему событие никогда не срабатывает (или отключается?), когда таймер останавливается/отключается не из потока пользовательского интерфейса?
.Отвечая на ваш последний вопрос, нельзя манипулировать элементами управления, созданными в другом потоке. Вы можете вызывать через делегатов.