我有 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
}
根据 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();
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)