多个(事实上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();
我遇到了机器视觉应用程序的一些问题,这让我疯狂。
由于
答案 0 :(得分:0)
是的,你可以这样做但是你无法控制工人的工作时间。
您可能需要重新设计并使用TPL,这更适合您的需求。
答案 1 :(得分:0)
是的,您可以使用许多BackgroundWorker DoWork来执行相同的功能。请记住,每个DoWork事件都在一个单独的线程上调用,因此您可能会遇到线程问题,例如数据争用,死锁或实时锁定。
此外,使用相同的函数也会使调试变得更加困难,就像在函数中的某处放置断点一样,您需要确定哪个线程触发事件。因此,除非函数相对简单,否则我建议您将DoWork事件挂钩到不同的事件处理程序,将公共代码放入一个函数并在事件函数内调用它。
此处已回答了您未同时触发线程的问题 Thread not run immediately when using more than 4 BackgroundWorker