0

我有幾個從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事件。

+0

您對「執行」使用了錯誤的名稱。它應該是「BeginExecute」。 – 2011-02-16 23:16:58

回答

0

我想通了這個問題。我在DoOperation()方法中使用ManualResetEvent。如果兩個行動同時進行,它認爲一切都已經完成。

相關問題