Task.ContinueWith 后定时器不再启用

Timer not enables again after Task.ContinueWith

我有一个工作计时器,它每 1 分钟检查一次是否有事情要做。 如果有事情要做,计时器会停止,品尝会开始(startTimer),这通常需要几分钟,任务完成后计时器应该再次启动...

但是没用...

    private void JobTimer_Tick(object sender, EventArgs e)
    {
        WriteLog("-------------------------------------------");
        WriteLog("-----------------Jobtimer Tick-------------");
        WriteLog("-------------------------------------------");
        JobTimer.Enabled = false;
        Task.Factory.StartNew(() => StartWorker()).ContinueWith((a) => JobTimer_AfterTick(JobTimer));
    }

    private void JobTimer_AfterTick(System.Windows.Forms.Timer t)
    {
        t.Enabled = true;
    }

这行得通,但计时器会在 1 分钟后再次计时,这并不好,因为最后一次计时还没有完成...

    private void JobTimer_Tick(object sender, EventArgs e)
    {
        WriteLog("-------------------------------------------");
        WriteLog("-----------------Jobtimer Tick-------------");
        WriteLog("-------------------------------------------");
        JobTimer.Enabled = false;
        Task.Factory.StartNew(() => StartWorker());;
       JobTimer.Enabled = true;
    }

System.Windows.Forms.Timer 在 UI 线程上运行,因此您需要将您的延续任务与 UI 线程

同步
Task.Factory.StartNew(() => StartWorker()).ContinueWith((a) => JobTimer_AfterTick(JobTimer), TaskScheduler.FromCurrentSynchronizationContext());