[.net] 在UI中多长时间使用一次System.Component.BackgroundWorker? (如果曾经)


Answers

BackgroundWorker使事情变得更容易。 有一件事我发现困难的方式是Backgroundworker本身具有线程亲和力,即使它应该隐藏线程切换问题。 在任何情况下,它都不会自动切换到UI线程。 它需要从UI线程创建并运行,以便线程切换正常发生。

Question

我相信一个响应式的用户界面是每个人都在努力的,而我们所要做的就是使用BackgroundWorker来做这件事。

你觉得很容易处理? 你经常使用它吗? 或者你有自己的框架来处理冗长的任务和报告过程。

我发现,我使用它很多,甚至使用它的代表,无论我需要某种进展报告。




我背后的工人阶级最大的问题是,由于取消,工人完成工作的时间确实无法知道。 BackgroundWorker不公开它使用的线程,所以你不能使用标准的技术来同步线程终止(连接等)。 你也不能在UI线程上等待循环,因为RunWorkerCompleted事件永远不会结束。 我一直不得不使用的黑客是简单地设置一个标志,然后启动一个计时器,将继续检查后台工作人员结束。 但是非常混乱,业务逻辑复杂化。

所以,只要您不需要支持确定性取消,那就太棒了。




我曾经使用过它,并且非常满意。 通常,不需要“大”的多线程,而只需要2线程(UI和Worker),而且工作得很好,而不必太担心底层的线程逻辑。




Links