背景工人的问题

时间:2015-09-11 01:36:17

标签: c# multithreading winforms .net-3.5 backgroundworker

多个(事实上19个)后台工作者都可以使用相同的DoWork事件吗?这有问题吗?

var bw1 = new BackgroundWorker();
bw1.DoWork += DoingStuff_DoWork;
var bw2 = new BackgroundWorker();
bw2.DoWork += DoingStuff_DoWork;
var bw2 = new BackgroundWorker();
bw3.DoWork += DoingStuff_DoWork;

我的下一个问题是,如果我在每个后台工作者上调用RunWorkerAsync,它们是否会同时启动?

bw1.RunWorkerAsync();
bw2.RunWorkerAsync();
bw3.RunWorkerAsync();

我遇到了机器视觉应用程序的一些问题,这让我疯狂。

由于

2 个答案:

答案 0 :(得分:0)

是的,你可以这样做但是你无法控制工人的工作时间。

您可能需要重新设计并使用TPL,这更适合您的需求。

答案 1 :(得分:0)

是的,您可以使用许多BackgroundWorker DoWork来执行相同的功能。请记住,每个DoWork事件都在一个单独的线程上调用,因此您可能会遇到线程问题,例如数据争用,死锁或实时锁定。

此外,使用相同的函数也会使调试变得更加困难,就像在函数中的某处放置断点一样,您需要确定哪个线程触发事件。因此,除非函数相对简单,否则我建议您将DoWork事件挂钩到不同的事件处理程序,将公共代码放入一个函数并在事件函数内调用它。

此处已回答了您未同时触发线程的问题 Thread not run immediately when using more than 4 BackgroundWorker