BackgroundWorker中有多个BeginGetResponse

时间:2012-10-04 08:42:20

标签: c# .net asynchronous backgroundworker

我的UI代码利用BackgoundWorker来处理昂贵的操作。 内部DoWork是通过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解雇。{/ p>

这可能吗?或者我应该使用不同的异步模式?

1 个答案:

答案 0 :(得分:0)

BeginGetResponse已经异步。此方法立即返回。响应完成后,FinishWebRequest将被触发。因此,您不需要使用BackgroundWorker

这是事件驱动的。