WP7针对两个BackgroundWorker对象的一个​​RunWorkerCompleted事件触发器

时间:2011-02-16 22:50:34

标签: c# multithreading silverlight windows-phone-7 backgroundworker

我有一些从BaseOperation类继承的对象。这些包括IntializeOperation,SignOnOperation,SignOffOperation等。

BaseOperation类有一个Execute()方法,它使用BackgroundWorker来执行任务,包括进行服务调用。我意识到这可能不是最好的设计,但它正是我现在正在使用的,重新设计现在是不可行的。这是该类的简化版本。

public void AsyncExecute()
{
    _result = DoOperation();
}

public void Execute()
{
    _worker = new BackgroundWorker();
    _worker.WorkerReportsProgress = false;

    _worker.DoWork += (s, e) =>
    {
        AsyncExecute();
    };

    _worker.RunWorkerCompleted += (s, e) =>
    {
        //Tell our callback what we've done
        if (_result is Exception)
            Failed(_result as Exception);
        else
            Succeeded(_result);
    };

    _worker.RunWorkerAsync();
}

如果我调用一个操作,它可以正常工作。但是,如果我快速连续调用两个操作,我会遇到问题。

当第一个操作完成时,它会调用RunWorkerCompleted两次,每次操作一次。我知道因为我可以在RunWorkerCompleted委托中断点,它会被击中两次,我还可以检查每次调用时我要确认它在不同的操作中的操作。我可以在第二个操作的DoOperation()方法中断点,以确认即使在RunWorkerCompleted事件触发该操作后它仍继续运行。

在第一次操作完成时,我无法弄清楚为什么会为两个操作引发RunWorkerCompleted事件。

1 个答案:

答案 0 :(得分:0)

我弄明白了这个问题。我在DoOperation()方法中使用ManualResetEvent。如果两个操作同时进行,它认为一切都已完成。

相关问题