我正在尝试两个人同时使用两个执行两个单独的方法Backgroundworker
(或者,如果不可能使用另一个方法)来获得性能。想法是在方法中进行大量计算。
有可能吗?
private readonly BackgroundWorker _worker = new BackgroundWorker();
private readonly BackgroundWorker _worker2 = new BackgroundWorker();
public MainWindow()
{
InitializeComponent();
_worker.WorkerReportsProgress = true;
_worker.WorkerSupportsCancellation = true;
_worker.DoWork += worker_DoWork;
_worker.RunWorkerAsync();
_worker2.WorkerReportsProgress = true;
_worker2.WorkerSupportsCancellation = true;
_worker2.DoWork += worker_DoWork2;
_worker2.RunWorkerAsync();
}
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
// Do something
}
private void worker_DoWork2(object sender, DoWorkEventArgs e)
{
// Do something simultaneously with worker_DorWork
}
是的,有可能。如今,许多应用程序消耗多个线程来并行工作。在进行此类工作时,也必须注意这些陷阱。
例如,如果您享有WorkerA和WorkerB消耗共享资源,你将不得不做同步与任何同步原语(如Mutex
,Semaphore
,ManualResetEvent
,等),这是适合您的方案。
另外,请注意,分配新线程不是免费的,每个线程都有开销,例如每个创建的线程都有1MB堆栈。
请注意,我建议您研究更现代的库来进行并行工作,例如Task Parallel Library
.NET 4.0中引入的库。具体来说,请查看Task
和Parallel
类。
编辑
根据您在评论中的问题,让我们看看使用Task
vs是什么样子BackgroundWorker
:
BackgroundWorker:
_worker.WorkerReportsProgress = true;
_worker.WorkerSupportsCancellation = true;
_worker.DoWork += worker_DoWork;
_worker.RunWorkerAsync();
任务:
var task = Task.Run(worker_DoWork);
或者,如果您使用的是.NET 4.0:
var task = Task.Factory.StartNew(worker_DoWork);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句