У меня есть несколько объектов, которые наследуются от класса 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 вызывается для обеих операций, когда завершена только первая операция.