2012-10-04 24 views
1

我的UI代碼利用BackgoundWorker來處理昂貴的操作。 DoWork內部是通過BeginGetResponse向遠程網絡服務器發送多個Web請求的方式。BackgroundWorker中的多個BeginGetResponse

的UI部分是:

private void start_Click(object sender, RoutedEventArgs e) 
    { 
     BackgroundWorker bw = new BackgroundWorker(); 
     bw.WorkerReportsProgress = true; 
     if (bw.IsBusy != true) 
     { 
      bw.DoWork += new DoWorkEventHandler(Processing.FormWebRequests); 
      bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(Processing.FinishBw); 
      bw.RunWorkerAsync(); 
     } 
    } 

DoWork執行以下操作:

public static void FormWebRequests(object sender, DoWorkEventArgs e) 
    { 
     foreach (webSites websiteitem in websites) 
     { 
      //Creation of webRequest object 

      webRequest.BeginGetResponse(new AsyncCallback(FinishWebRequest), webRequest); 

     } 
    } 

最後,回調方法:

private static void FinishWebRequest(IAsyncResult result) 
{ 
    using (HttpWebResponse response = wr.EndGetResponse(result) as HttpWebResponse) 
     { 
      //Parsing httpResponse 
     } 
} 

顯然,BackgroundWorker火災RunWorkerCompleted最後BeginGetResponse後立即發送。問題是我希望BackgroundWorker在最後EndGetResponse完成後觸發RunWorkerCompleted

這可能嗎?或者我應該使用不同的異步模式?

回答

0

BeginGetResponse已經是異步。此方法立即返回。響應完成後,FinishWebRequest將被觸發。所以,你不需要使用BackgroundWorker

這是事件驅動。