2017-03-26 2 views
-1

저는 C#의 BackgroundWorker에 관한 문제에 직면하고 있습니다. 여기C# BackgroundWorker inside BackgroundWorker

 var bwBIG = new BackgroundWorker(); 
     bwBIG.DoWork += (_senderBIG, argsBIG) => 
     { 
      var bw = new BackgroundWorker(); 
      String requestResult = ""; 
      bw.DoWork += (_sender, args) => 
      { 
       requestResult = tempHelper.GetData(); 
      }; 
      bw.RunWorkerCompleted += (_sender, args) => 
      { 
       makeData(requestResult); 
      }; 
      bw.RunWorkerAsync(); 
     }; //bwBIG.DoWork 
     bwBIG.RunWorkerCompleted += (_senderBIG, argsBIG) => 
     { 
      prepareData(rtbData.Text); 
      MessageBox.Show("Data OK"); 
     }; 
     bwBIG.RunWorkerAsync(); 

그것은 "다음 MessageBox.Show합니다 (tempHelper.GetData()를 실행한다고 가정 한 다음 makeData (requestResult), 다음 finnally prepareData (rtbData.Text) 내 프로그램 코드의 일부 조각입니다 데이터 OK "); 그러나 bw가 전혀 실행되지 않는 것 같습니다. 코드를 실행할 때마다 MessageBox.Show ("Data OK")에 이상하게 점프되었습니다. 도와주세요 ??? 읽어 주셔서 감사합니다.

+1

'bwBIG.Dowork'에는 아무 것도 없으므로 아무런 시간도 멈추지 않습니다. 당신이하고있는 일은 다른 배경 작업자를 설정하고 비동기로 실행하라는 것입니다. 당신은'bw.DoWork'가 끝나기를 기다리지 않는 것처럼 보입니다. 그래서'bwBig'는 매우 빨리 끝납니다. 그리고 나는 왜 이것이 백그라운드 작업을 생성 할 때 배경 작업을 설정해야하는지 묻어야 만합니다. – Chris

+1

모든 bwBIG가 설정되고 내부 BW가 실행됩니다. 즉시 종료되고 RunWorkerCompleted가 실행됩니다. 당신이 무엇을하려고하는지 확신하지 못합니다. –

답변

0

작업자 스레드 내에서 backgroundworkerthread를 만드는 것은 쓸모가 없습니다.

나는이 방법을 유지합니다 :

var localCopy = rtbData.Text; 

var bwBIG = new BackgroundWorker(); 
bwBIG.DoWork += (_senderBIG, argsBIG) => 
{ 
    var requestResult = tempHelper.GetData(); 
    makeData(requestResult); 

    prepareData(localCopy); 

    MessageBox.Show("Data OK"); 
}; //bwBIG.DoWork 
bwBIG.RunWorkerAsync();   

그것은 데이터의 흐름을보고 좀 어렵다.

+0

안녕하세요, 답변 주셔서 감사합니다. 그러나 prepareData (rtbData.Text)는 var requestResult = tempHelper.GetData(); 끝난. tempHelper.GetData()는 unknow 시간 (2 ~ 30 초) 동안 실행됩니다. –