有什么方法可以在任务中禁用 windows.form.timer 吗?
Is there any way to disable a windows.form.timer inside a Task?
有什么方法可以在任务中禁用 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 的值仍然为真。
有没有办法在任务中禁用定时器?
禁用计时器效果很好,您可以通过看不到一屏消息框来轻松判断。问题出在您的测试代码上,它有一个线程竞争错误。睡一会也很容易看到:
private void runTask() {
//Process here....
timer1.Enabled = false;
System.Threading.Thread.Sleep(100);
MessageBox.Show(timer1.Enabled.ToString());
}
您现在看到 "False"。通过更改@Ron 的代码片段并使用 BeginInvoke 而不是 Invoke,您会看到完全相同的错误。
定时器 class 已经是线程安全的停止并且不需要任何帮助。您可以从 Reference Source 中看到它,注意对 PostMessage() 的调用。然而,启动计时器并不安全,工作线程不会 运行 调度程序循环,因此不会触发 Tick 事件。
你没有问题,不要修复它。
有什么方法可以在任务中禁用 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 的值仍然为真。 有没有办法在任务中禁用定时器?
禁用计时器效果很好,您可以通过看不到一屏消息框来轻松判断。问题出在您的测试代码上,它有一个线程竞争错误。睡一会也很容易看到:
private void runTask() {
//Process here....
timer1.Enabled = false;
System.Threading.Thread.Sleep(100);
MessageBox.Show(timer1.Enabled.ToString());
}
您现在看到 "False"。通过更改@Ron 的代码片段并使用 BeginInvoke 而不是 Invoke,您会看到完全相同的错误。
定时器 class 已经是线程安全的停止并且不需要任何帮助。您可以从 Reference Source 中看到它,注意对 PostMessage() 的调用。然而,启动计时器并不安全,工作线程不会 运行 调度程序循环,因此不会触发 Tick 事件。
你没有问题,不要修复它。