WinForms多线程问题

我有一个在后台工作的线程,并使用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添加一个处理程序,并让你的线程很好地退出…

点赞