BackgroundWorker和ManualResetEvent

时间:2013-03-19 14:48:48

标签: .net multithreading backgroundworker manualresetevent

任务。

我有一种方法可以在里面运行两个长时间的函数。

我不是在谈论锁定对象。这些函数是独立的,只有在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。

0 个答案:

没有答案