简单的问题,重复标题:
关闭 WinForms 应用程序是否会停止所有事件的 BackgroundWorker?
最佳答案
是的,确实如此。
BackgroundWorker.RunWorkerAsync
只是在内部委托(delegate)上调用 BeginInvoke
,后者将请求排队到 ThreadPool
。由于所有 ThreadPool
线程都是 background , 是的,它会在应用程序结束时结束。
但是,请记住:
通过“关闭 WinForms 应用程序”,我假设关闭了 main
Form
实例(通常是传递给Application.Run
在由 Visual Studio 自动生成的Program
类中)。如果您有一个带有后台工作程序的子窗口,它不会自动停止其BackgroundWorker
。让后台线程在应用程序退出时中止是不是结束线程的推荐方式,因为您无法保证它将在何处中止。一个更好的方法是在关闭之前向 worker 发出信号,等待它优雅地完成,然后退出。
更多信息:Delegate.BeginInvoke , MSDN on Thread Pooling , Thread.IsBackground
关于c# - 关闭应用程序是否会停止所有事件的 BackgroundWorker?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1687677/