截止形式我有一个WinForms应用程序,它由一个主UI线程和4个任务。我的主要形式有这样一个私有成员级别的变量:与任务运行
private bool keepThreadsRunning = false;
在我的主要形式的Load()事件,我有以下几点:
keepThreadsRunning = true;
var task1Worker = Task.Factory.StartNew(() => DoStuff1());
var task2Worker = Task.Factory.StartNew(() => DoStuff2());
var task3Worker = Task.Factory.StartNew(() => DoStuff3());
var task4Worker = Task.Factory.StartNew(() => DoStuff4());
里面我的每个DoStuff的()方法,我基本上有这样的:
while (keepThreadsRunning)
{
// do work here
Thread.Sleep(30000); // a couple of my tasks only need to run every 30 seconds or so
}
最后,在我的Form_Closing()事件处理程序,我有以下几点:
keepThreadsRunning = false;
this.Close();
看着我在任务管理器应用程序,看来,当我闭上形式,但我有点困惑的四个任务的过程已经结束。我的调用this.Close()真的导致这些任务终止(即使它们在Thread.Sleep()调用时)?有没有比我现在编码的方式更好的完成此方法?
编辑 - 我简单看了一下任务取消(当我的应用程序退出),但我的理解是,我的任务就需要定期检查取消标记以确定它们是否已取消。因为我的一些任务需要每30秒运行,我无法弄清楚如何我实现一个30秒等待(目前的Thread.Sleep()),并且仍然有任务来检查取消标记。