我有幾個從BaseOperation類繼承的對象。這些措施包括IntializeOperation,SignOnOperation,SignOffOperation等WP7一個RunWorkerCompleted事件觸發兩個BackgroundWorker對象
的BaseOperation類具有使用一個BackgroundWorker完成的任務,其中包括製造服務調用的execute()方法。我意識到這可能不是最好的設計,但這正是我現在正在處理的事情,現在重新設計是不可行的。這是該課程的簡化版本。
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事件。
您對「執行」使用了錯誤的名稱。它應該是「BeginExecute」。 – 2011-02-16 23:16:58