c# - 当用户关闭表单时,我是否必须关闭正在运行的BackgroundWorkers?

标签 c# backgroundworker

从这里开始Does closing the application stops all active BackgroundWorkers?看来不是。

但是从这里开始How to stop BackgroundWorker on Form's Closing event?看来是的。

那么它是哪一个呢?

(编辑:我意识到 BackgroundWorker 可能会因异常退出。但这有什么问题吗?这里的重点不是不要留下占用资源的正在运行的线程吗?)

最佳答案

关闭表单不会停止该表单启动的所有后台工作人员。

当整个应用程序结束时,它停止所有后台线程。

关闭主窗体(除非您修改了 Main 方法来执行其他操作)将结束整个应用程序。

您引用的每个问题都是正确的。如果关闭主窗体,则整个应用程序将结束,后台工作程序将自行关闭。如果正在关闭的窗体不是主窗体,而是其他窗体,并且您希望后台工作程序开始停止它,那么您需要自己执行此操作。

还值得注意的是 second link您提供的内容要求一些更复杂的东西。该文章清楚地表明,关闭表单(如果它是主表单)将停止后台线程的执行。 OP 试图做的是告诉后台线程,“嘿,是时候完成了,我们已经完成了”,然后让表单等待,直到后台线程可以很好地完成清理工作,而不仅仅是当线程正在执行某些操作时退出并强制中止线程。

关于c# - 当用户关闭表单时,我是否必须关闭正在运行的BackgroundWorkers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12393195/

相关文章:

c# - 在 IIS 7 上发布 Web 服务时出现 500.19 - 内部服务器错误

android - 具有动态适配器更改的 MultiAutoCompleteTextView

c# - 停止后台 worker

c# - 后台工作人员的 ReportProgress 百分比参数 C#

c# - C# 中的系统驱动程序列表

c# - 电子邮件查看器应用程序

c# - 当在 "what-if"工具中使用实例时,不可变类是否合适?

C# - 在 ASP.NET MVC 3 View 中使用多个数据调用

C# : Method is being called twice in a row

c# - 为什么 BackgroundWorker 的 WorkerReportsProgress 和 WorkerSupportsCancellation 的默认值是 false?