当我退出应用程序时,如何确保正在进行的线程不会在糟糕的时刻中断



我是线程的新手,所以我试图正确掌握一些东西。

我有一个Windows表单应用程序,它使用线程来保持我的UI响应,而一些服务器恶作剧正在进行。

我的问题是:当我退出应用程序时,正在进行的线程会发生什么?他们会跑到完成还是会突然中断?

如果它们被打断

,我能做些什么来确保它们至少不会被打断,从而损坏我服务器上的数据(强制它们运行到代码中的安全位置,我知道可以中断执行(

您需要保留所述线程的引用,并调用 .当您想要终止时,对它们进行中止((。然后,您将线程的代码放在try/catch块中并处理ThreadAbortException。这将允许您清理正在执行的操作,并按照自己的节奏干净地终止线程。在主线程中,在您调用 .Abort((,您只需等到线程不再运行(通过轮询 .线程对象的 IsAlive 属性(,然后关闭应用程序。

线程需要一个进程才能运行。如果不终止已启动的所有非后台线程,则进程将无法终止。标记为后台线程的线程将被中止。

因此,行为完全取决于您的实现。如果要关闭应用程序,可以等待所有线程自行终止,可以设置一个事件来要求它们终止并等待,也可以直接终止线程。

UI 线程将自行终止,因为它运行一个消息循环,该循环在操作系统请求时停止,另请参阅维基百科和此答案。

最新更新