Ryd*_*der 4 c# parallel-processing backgroundworker winforms
我有3个后台工作人员,每个工作人员处理一个24位位图图像(Y,Cb,Cr)的通道.每个8位图像的处理需要几秒钟,并且它们可能无法同时完成.
我想在完成后将频道合并为一个图像.单击一个按钮时,每个按钮都会backgroundWorkerN.RunWorkerAsync()启动,当它们完成时,我会设置一个标志为true.我尝试使用while循环while (!y && !cb && !cr) { }来连续检查标志,直到它们为真,然后退出循环并继续处理下面的代码,这是将通道合并回来的代码.但是当我运行它时,过程永远不会结束.
private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
backgroundWorker2.RunWorkerAsync();
backgroundWorker3.RunWorkerAsync();
while (!y && !cb && !cr) { }
//Merge Code
}
Run Code Online (Sandbox Code Playgroud)
小智 5
基于Renuiz的答案,我会这样做:
private object lockObj;
private void backgroundWorkerN_RunWorkerCompleted(
object sender,
RunWorkerCompletedEventArgs e)
{
lock (lockObj)
{
y = true;
if (cb && cr) // if cb and cr flags are true -
// other backgroundWorkers finished work
{
someMethodToDoOtherStuff();
}
}
}
Run Code Online (Sandbox Code Playgroud)