2012-10-04 3 views
1

값 비싼 작업을 처리하기 위해 BackgoundWorker을 사용하는 UI 코드가 있습니다. DoWorkBeginGetResponse을 통해 원격 웹 서버에 여러 웹 요청을 보내는 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 
     } 
} 

물론, 오른쪽 마지막 BeginGetResponseBackgroundWorker 화재 RunWorkerCompleted 전송 . 문제는 이 RunWorkerCompleted으로 끝나고 EndGetResponse이 끝났습니다.

이것이 가능합니까? 아니면 다른 비동기 패턴을 사용해야합니까?

답변

0

BeginGetResponse은 이미 비동기입니다. 이 메서드는 즉시 반환합니다. 응답이 완료되면 FinishWebRequest이 해고됩니다. 따라서 BackgroundWorker을 사용할 필요가 없습니다.

이것은 이벤트 기반입니다.