1

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発火します。問題は、最後が終わった後に発射したいということです。RunWorkerCompletedBeginGetResponseBackgroundWorkerRunWorkerCompletedEndGetResponse

これは可能ですか?または、別の非同期パターンを使用する必要がありますか?

4

1 に答える 1

0

BeginGetResponseすでに非同期です。このメソッドはすぐに戻ります。応答が完了 FinishWebRequestすると、解雇されます。したがって、使用する必要はありませんBackgroundWorker

これはイベント駆動型です。

于 2014-05-24T04:08:36.740 に答える