0

任务。

我有一种方法可以在内部运行两个长期功能。

我不是在这里谈论锁定对象。这些函数是独立的,只有在只读中使用的相同参数。

我想要一个函数在线程内运行。

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。

4

0 回答 0