WP7 Один запуск события RunWorkerCompleted для двух объектов BackgroundWorker - PullRequest
0 голосов
/ 17 февраля 2011

У меня есть несколько объектов, которые наследуются от класса 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 () 2-й операции, чтобы подтвердить, что он продолжает работать даже после того, как для этой операции сработало событие RunWorkerCompleted.

У меня возникают проблемы с выяснением, почему событие RunWorkerCompleted вызывается для обеих операций, когда завершена только первая операция.

1 Ответ

0 голосов
/ 17 февраля 2011

Я разобрался в проблеме.Я использую ManualResetEvent в методе DoOperation ().Если две операции выполняются одновременно, он считает, что все завершено.

...