1
값 비싼 작업을 처리하기 위해 BackgoundWorker
을 사용하는 UI 코드가 있습니다. DoWork
은 BeginGetResponse
을 통해 원격 웹 서버에 여러 웹 요청을 보내는 metod입니다.BackgroundWorker 안에 여러 BeginGetResponse
사용자 인터페이스 부분은 :
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
}
}
물론, 오른쪽 마지막 BeginGetResponse
후 BackgroundWorker
화재 RunWorkerCompleted
전송 . 문제는 이 RunWorkerCompleted
으로 끝나고 EndGetResponse
이 끝났습니다.
이것이 가능합니까? 아니면 다른 비동기 패턴을 사용해야합니까?