任务。
我有一种方法可以在内部运行两个长期功能。
我不是在这里谈论锁定对象。这些函数是独立的,只有在只读中使用的相同参数。
我想要一个函数在线程内运行。
private static ManualResetEvent mre = new ManualResetEvent(false);
private Result result;
{
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
bw.RunWorkerAsync(new BackgroundWorkerArgument(bitmap, image));
Rectangle rectangle = DetectRectangle(bitmapClone));
mre.WaitOne();
mre.Reset();
<another code, dont bother>
}
void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
result= (Result)e.Result;
}
void bw_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorkerArgument argument = (BackgroundWorkerArgument)e.Argument;
e.Result = CreateResult(argument.Bitmap, argument.Image);
mre.Set();
}
问题。
<another code, dont bother>
我这样做后立即运行Set()
。没关系。
但bw_RunWorkerCompleted
在那之后运行。这意味着结果变量为空,但我希望它包含线程函数的结果。
如何返工我的代码 -result= (Result)e.Result
必须在下一行之前运行WaitOne()
?
如果它不可能,BackgroundWorker
也许我需要使用线程?我正在使用.NET 2.0。