有什么方法可以在任务中禁用 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 事件。

你没有问题,不要修复它。