Kor*_*tak 11 c# backgroundworker winforms
简单的问题,重复标题:
关闭WinForms应用程序是否会停止所有活动的BackgroundWorkers?
Gro*_*roo 18
是的,它确实.
BackgroundWorker.RunWorkerAsync只需调用BeginInvoke内部委托,然后将请求排队到ThreadPool.由于所有ThreadPool线程都是后台,是的,它将在应用程序结束时结束.
但是,请记住:
通过"关闭WinForms应用程序"我假设关闭主Form实例(通常是由Visual Studio自动生成Application.Run的Program类中传递的实例).如果您有一个带后台工作程序的子窗口,它将不会BackgroundWorker自动停止.
允许在应用程序退出时中止后台线程不是建议的结束线程的方法,因为您无法保证它将被中止.一个更好的方法是在关闭之前发出信号,等待它优雅地完成,然后退出.
更多信息:Delegate.BeginInvoke,线程池上的MSDN,Thread.IsBackground
在主(UI)线程停止后,线程可以继续执行的唯一方法是通过创建新的Thread实例并将IsBackground设置为false来明确创建它.如果你没有(或者你使用ThreadPool产生后台线程 - 或者BackgroundWorker也在内部使用ThreadPool)你的线程将是一个后台线程,并在主线程结束时终止.
| 归档时间: |
|
| 查看次数: |
2609 次 |
| 最近记录: |