我发现我很享受通过BackgroundWorkers异步运行代码的简单性。我通过例子或反复试验来了解自己的用途,陷阱,安全线程等,而不是理论,也许是我的致命弱点。如何创建一个后台工作者池?
我已经完成了我的研究,但有一件事我没有找到太多的话题,我如何有效地创建和使用一个BackgroundWorkers池?或者什么是更好的选择,就像使用BW一样简单?
我会说明我遇到的问题: 我有一个任务X,Y和Z,每一个都是密集的,因此它将挂起UI线程。我决定BW是答案,即使这个代码只执行一次。我学会了如何使用它们,以及一些安全的线程实践,并继续前进。很快我的代码看起来像:BW1,BW2,BW3等等。
然后我开始更加熟悉它们,并真正将代码放入可用于硬件监视或其他无限循环/总是运行项目的BW中。我仍遇到BW5,BW6 ....问题。
我发现创造性的方式来通过在调用RunWorkerAsynchronous()之前设置一个全局字符串变量来获得多用途BackgroundWorkers,然后我可以在BackgroundWorker内部嵌套If/Elses或开关以执行所需的代码关闭了我设置字符串变量的内容。但是,我觉得我只是在自我学习的极限内跳舞。
因此,谁能指导我通过创建线程/ BW中的池的概念,并根据需要在我的程序中使用它们,回收线程,而不是明确地建立每一个,然后有几十backgroundworkers的特定密集的目的去玩弄?
注:我不是一个很好的程序员,所以我正在寻找简单的功能示例或解释。任何和所有的帮助,但热切欢迎!
你看过Tasks(TPL)和/或正规的ThreadPool吗? IIRC,如果需要用于更新WPF或Winforms UI的同步上下文,backgroundworker会很好,但它不完全灵活。 – x0n 2014-10-16 15:46:38
你检查了[ThreadPool Class](http://msdn.microsoft.com/en-us/library/System.Threading.ThreadPool(v = vs.110).aspx?cs-save-lang = 1&cs-lang = csharp#code-snippet-1) – bansi 2014-10-16 15:46:58
这是.NET 2.0还是更高? – 2014-10-16 15:48:03