我有一个工作时间,每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;
}
答案 0 :(得分:1)
System.Windows.Forms.Timer在UI线程上运行,因此您需要将延续任务与UI线程同步
Task.Factory.StartNew(() => StartWorker()).ContinueWith((a) => JobTimer_AfterTick(JobTimer), TaskScheduler.FromCurrentSynchronizationContext());