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());
我有一个工作计时器,它每 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());