我的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>
这可能吗?或者我应该使用不同的异步模式?
答案 0 :(得分:0)
BeginGetResponse
已经异步。此方法立即返回。响应完成后,FinishWebRequest
将被触发。因此,您不需要使用BackgroundWorker
。
这是事件驱动的。