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
。
這可能嗎?或者我應該使用不同的異步模式?