BackgoundWorker
高価な操作の処理に使用する UI コードがあります。内部DoWork
は、複数の Web リクエストを 経由でリモート Web サーバーに送信するメソッドです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
RunWorkerCompleted
EndGetResponse
これは可能ですか?または、別の非同期パターンを使用する必要がありますか?