我有一个在后台工作的线程,并使用Invoke,BeginInvoke方法将更新传递给Form.在显示表单后创建线程,因此没有问题.
问题是如何正确关闭.我的工作线程有能力被要求退出,并将在此之后很快退出一些时间(毫秒).
但是,如果表单先关闭,则Invoke的内容会中断.我尝试将一个Thread.Join添加到窗体关闭事件,但当然这会导致死锁,即使对于BeginInvoke,因为somhow一个Thread.Join阻塞了该线程上的BeginInvoke …
关闭表单并干净地关闭其工作线程的正确方法是什么?
编辑:
基本现行代码:
volatile bool abort;
void WorkerThread()
{
while(!abort)DoStuffIncludingInvokesOnThisForm();
}
void MyForm_FormClosing(object sender, FormClosingEventArgs e)
{
abort = true;
workerThread.Join();//will deadlock with DoStuffIncludingInvokesOnThisForm
//if get here before workerThread has exited, invokes will fail if workerthread is still in DoStuffIncludingInvokesOnThisForm
}
最佳答案 向FormClosing添加一个处理程序,并让你的线程很好地退出…