2012-03-05 4 views
1

저는 C# 응용 프로그램에서 BackgroundWorker을 만듭니다. DoWork 안에는 몇 개의 웹 서비스가 호출됩니다. 모든 것이 정상적으로 작동하지만 DoWork 프로세스가 완료 되 자마자 응용 프로그램이 응답하지 않습니다. 또한 UI 구성 요소를 BackgroundWorker에서 업데이트하지 않습니다. 여기 .Net BackgroundWorker가 응답하지 않습니다.

는 코드 DoWork

private void bwNQUpdate_DoWork(object sender, DoWorkEventArgs e) 
{ 
    int nStatusCode = 0; 

    QDetails[] pQDetails = null; 
    string queueName = "test_queue"; 

    int nQLength = cMezeoFileCloud.NQGetLength(ServiceUrl, queueName, ref nStatusCode); 
    if (nQLength > 0) 
     pQDetails = cFileCloud.GetData(ServiceUrl, queueName, nQLength, ref nStatusCode); 

    if (pQDetails != null) 
    {   
     for (int n = 0; n < pQDetails[0].nTotalQ; n++) 
     {    
      UpdateFromNQ(pNQDetails[n]); 
      cFileCloud.QValue(ServiceUrl , queueName, 1, ref nStatusCode); 
     } 
    }  
} 

RunWorkerCompleted

private void bwNQUpdate_RunWorkerCompleted(object sender, ProgressChangedEventArgs e) 
{ 
     MessageBox.Show("Download completed."); 
} 

RunWorkerCompleted 실행 후, 애플리케이션이 응답하지 않는상에서 실행되고있다.

+2

코드 게시! 그것 없이는 잘못 될 수있는 것에 대한 느낌을 얻기가 어렵습니다! – MoonKnight

+0

WPF 또는 양식 응용 프로그램입니까? – ebattulga

+0

이 때 주 스레드에서 어떤 코드가 실행 중입니까? – svick

답변

1

먼저, 중단 점을 사용하여 MessageBox.Show("Download completed.");이 호출되는지 확인하십시오.

호출 된 경우 직접 호출하는 대신 메시지 상자 호출을 호출 해보십시오. 기본적으로 백그라운드 작업자 내에서 발생하는 모든 이벤트는 스레드 아래에서 발생할 수 있습니다.

0

작성하신 RunWorkerCompleted는 완벽합니다. RunWorkerCompleted 이벤트는 작업 스레드가 아닌 호출하는 스레드에 의해 처리됩니다. 백그라운드 스레드에서 MessageBox.Show를 실행하더라도 스레드가 자체 Uicomponent를 만들 때 문제가 발생하지 않습니다.

DoWork에 문제가 있는지 의심 스럽습니다.

관련 문제