有没有办法在任务中禁用windows.form.timer?
这是我的示例代码。
private void timer1_Tick(object sender, EventArgs e)
{
Task.Factory.StartNew( () => {runTask();} );
}
private void runTask()
{
//Process here....
timer1.enabled = false;
MessageBox.Show(timer1.Enabled.ToString());
}
当我运行程序时,timer1.enabled的值仍为true。 反正在任务中禁用Timer吗?
答案 0 :(得分:2)
禁用计时器工作正常,您可以通过不获取屏幕消息框轻松判断。这是你的测试代码问题,它有一个线程竞争错误。睡觉也很容易看到:
private void runTask() {
//Process here....
timer1.Enabled = false;
System.Threading.Thread.Sleep(100);
MessageBox.Show(timer1.Enabled.ToString());
}
你现在看到“假”。您可以通过更改@ Ron的代码段并使用BeginInvoke而不是Invoke来查看完全相同的错误。
Timer类已经可以线程安全地停止,不需要任何帮助。你可以从Reference Source看到它,注意对PostMessage()的调用。但是,启动计时器并不安全,工作线程不会运行调度程序循环,因此Tick事件不会触发。
你没有问题,不要修理它。