小编典典

BackgroundWorker 与后台线程

all

我有一个关于我应该在 Windows
窗体应用程序上使用的后台线程实现的选择的风格问题。目前我有一个BackgroundWorker具有无限(while(true))循环的表单。在这个循环中,我WaitHandle.WaitAny用来保持线程打盹,直到发生有趣的事情。我等待的事件句柄之一是“
StopThread”事件,以便我可以跳出循环。这个事件在我被覆盖时发出信号Form.Dispose()

我在某处读到了BackgroundWorker真正适用于您不想与 UI 绑定并具有有限结束的操作的地方 -
例如下载文件或处理一系列项目。在这种情况下,“结束”是未知的,只有当窗口关闭时。因此,我是否更适合使用后台线程而不是BackgroundWorker为此目的?


阅读 45

收藏
2022-08-17

共1个答案

小编典典

根据我对您问题的理解,您使用的BackgroundWorker是标准线程。

BackgroundWorker推荐用于不想占用 UI 线程的事情的原因是因为它在进行 Win Forms 开发时会暴露一些不错的事件。

事件喜欢RunWorkerCompleted在线程完成它需要做的事情时发出信号,以及ProgressChanged在线程进度上更新 GUI 的事件。

因此,如果您 使用这些,我认为使用标准线程来完成您需要做的事情没有任何害处。

2022-08-17