我发现我很享受通过BackgroundWorkers异步运行代码的简单性。我通过实例或试错来教导我自己的用途,陷阱,安全线程等,而不是理论,也许是我的阿基里斯脚跟。
我已经完成了我的研究,但有一件事我没有太多谈论,我怎样才能有效地创建和使用一群BackgroundWorkers?或者什么是更好的替代方案,就像使用BW一样简单?
我将说明我遇到的问题: 我有一个任务X,Y和Z,每个都是密集的,因此它将挂起UI线程。我决定BW是答案,即使这个代码只执行一次。我学会了如何使用它们,一些安全的线程实践,并继续我的方式。很快,我的代码看起来像:BW1,BW2,BW3等等。
然后我开始更熟悉它们并且真正将代码放入BW中,可用于硬件监控或其他无限循环/始终运行的项目。我仍然遇到了BW5,BW6 ....问题。
通过在调用RunWorkerAsynchronous()之前设置全局字符串变量,然后我可以在BackgroundWorker中使用嵌套的If / Elses或Switch来执行基于所需的代码,我找到了创造性的方法来拥有多用途BackgroundWorkers。我将字符串变量设置为。但是,我觉得我只是在自我学习的极限上跳舞。
所以任何人都可以指导我完成创建一个线程/ BW的概念,并在我的程序中根据需要使用它们,回收线程而不是显式创建每个线程,然后有几十个后台工作者特定的密集目的来玩杂耍?
注意:我不是一个非常优秀的程序员,所以我正在寻找简单的功能实例或解释。我们热切欢迎任何和所有的帮助!
答案 0 :(得分:2)
我强烈建议您使用“任务”来实现您的目标。这管理从线程池中选择线程的所有艰苦工作,平衡多个核心的线程等。
如果你有这个功能:
public void DoSomething()
{
//things happen here
}
然后您可以使用以下方式启动任务:
var task = Task.Factory.StartNew(DoSomething);
或
var task = new Task(DoSomething);
您可以在http://msdn.microsoft.com/en-us/library/dd537609(v=vs.110).aspx
了解更多信息答案 1 :(得分:1)
您不需要将它们集中在一起。它们在内部使用ThreadPool,它已经是一个线程池。