gpt4 book ai didi

WinForms 多线程问题

转载 作者:行者123 更新时间:2023-12-01 04:09:51 25 4
gpt4 key购买 nike

我有一个线程在后台执行一些工作,并使用 Invoke、BeginInvoke 方法将更新传递给 Form。该线程是在显示表单后创建的,因此没有问题。

问题是如何正确关机。我的工作线程有能力被要求退出,并会在不久之后退出(毫秒)。

但是,如果表单首先关闭,则调用内容会中断。我尝试将 Thread.Join 添加到表单关闭事件中,但这当然会导致死锁,即使对于 BeginInvoke 也是如此,因为 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 并要求您的线程很好地退出......

关于WinForms 多线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6851713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com