我有一个关于我应该在 Windows 窗体应用程序上使用的后台线程实现的选择的风格问题。目前我有一个BackgroundWorker具有无限(while(true))循环的表单。在这个循环中,我WaitHandle.WaitAny用来保持线程打盹,直到发生有趣的事情。我等待的事件句柄之一是“ StopThread”事件,以便我可以跳出循环。这个事件在我被覆盖时发出信号Form.Dispose()。
BackgroundWorker
(while(true))
WaitHandle.WaitAny
StopThread
Form.Dispose()
我在某处读到了BackgroundWorker真正适用于您不想与 UI 绑定并具有有限结束的操作的地方 - 例如下载文件或处理一系列项目。在这种情况下,“结束”是未知的,只有当窗口关闭时。因此,我是否更适合使用后台线程而不是BackgroundWorker为此目的?
根据我对您问题的理解,您使用的BackgroundWorker是标准线程。
BackgroundWorker推荐用于不想占用 UI 线程的事情的原因是因为它在进行 Win Forms 开发时会暴露一些不错的事件。
事件喜欢RunWorkerCompleted在线程完成它需要做的事情时发出信号,以及ProgressChanged在线程进度上更新 GUI 的事件。
RunWorkerCompleted
ProgressChanged
因此,如果您 不 使用这些,我认为使用标准线程来完成您需要做的事情没有任何害处。