我想在另一个帖子中更改计时器间隔:
class Context : ApplicationContext {
private System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
public Context() {
timer.Interval = 1;
timer.Tick += timer_Tick;
timer.Start();
Thread t = new Thread(ChangeTimerTest);
t.Start();
}
private void ChangeTimerTest() {
System.Diagnostics.Debug.WriteLine("thread run");
timer.Interval = 2;
}
private void timer_Tick(object sender,EventArgs args) {
System.Diagnostics.Debug.WriteLine(System.DateTime.Now.ToLongTimeString());
}
}
但是当我更改新线程中的间隔时,计时器停止。没有错误,计时器就停止了。 为什么会发生这种情况?我该如何解决?
THX
答案 0 :(得分:0)
尝试这个,我尝试了它并且它有效,我只将新间隔从2更改为2000毫秒,这样您就可以看到输出的差异。 您必须以线程安全的方式更改间隔,因为计时器位于UI线程上下文中。在这些情况下,建议使用代表。
private System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
public void Context() {
timer.Interval = 1;
timer.Tick += timer_Tick;
timer.Start();
Thread t = new Thread(ChangeTimerTest);
t.Start();
}
delegate void intervalChanger();
void ChangeInterval()
{
timer.Interval = 2000;
}
void IntervalChange()
{
this.Invoke(new intervalChanger(ChangeInterval));
}
private void ChangeTimerTest() {
System.Diagnostics.Debug.WriteLine("thread run");
IntervalChange();
}
private void timer_Tick(object sender,EventArgs args) {
System.Diagnostics.Debug.WriteLine(System.DateTime.Now.ToLongTimeString());
}