c# - 关闭应用程序是否会停止所有事件的 BackgroundWorker?

标签 c# winforms backgroundworker

简单的问题,重复标题:

关闭 WinForms 应用程序是否会停止所有事件的 BackgroundWorker?

最佳答案

是的,确实如此。

BackgroundWorker.RunWorkerAsync 只是在内部委托(delegate)上调用 BeginInvoke,后者将请求排队到 ThreadPool。由于所有 ThreadPool 线程都是 background , 是的,它会在应用程序结束时结束。

但是,请记住:

  1. 通过“关闭 WinForms 应用程序”,我假设关闭了 main Form 实例(通常是传递给 Application.Run 在由 Visual Studio 自动生成的 Program 类中)。如果您有一个带有后台工作程序的子窗口,它不会自动停止其 BackgroundWorker

  2. 让后台线程在应用程序退出时中止是不是结束线程的推荐方式,因为您无法保证它将在何处中止。一个更好的方法是在关闭之前向 worker 发出信号,等待它优雅地完成,然后退出。

更多信息:Delegate.BeginInvoke , MSDN on Thread Pooling , Thread.IsBackground

关于c# - 关闭应用程序是否会停止所有事件的 BackgroundWorker?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1687677/

相关文章:

c# - .csproj 文件中未通知时,Visual Studio 如何确定输出路径?

c# - 十进制数的正则表达式(最多 3 个带逗号的十进制数)

c# - 将 Postman 与 gRPC 结合使用

c# - 以编程方式更改 Excel 行或列的高度

c# - 如何在不卡住 GUI C# Winform 的情况下将组合框值传递给 BackgroundWorker

c# - 如何在执行功能期间制作应用程序加载屏幕

c# - 使用Kubernetes Client for C#重新启动Kubernetes Pod

c# - 访问程序自己的目录

.net - 将选项卡控件向右对齐

c# - 调试后台 worker