任务。
我有一种方法可以在里面运行两个长时间的函数。
我不是在谈论锁定对象。这些函数是独立的,只有在readonly中使用的相同参数。
我想要一个func在线程内运行。
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
之后会运行。这意味着结果变量为null,但我希望它包含线程函数的结果。
如何修改我的代码 - result= (Result)e.Result
必须在WaitOne()
的下一行之前运行?
如果BackgroundWorker
不可能,我可能需要使用线程吗?
我正在使用.NET 2.0。