2011-09-29 3 views
0

다양한 AD 그룹의 사용자 목록을 가져 와서 양식의 DataGrid에 표시하는 응용 프로그램을 작성하려고합니다. 폼의 단추를 클릭하면 AD 그룹에 대한 사용자 목록을 가져 오는 메서드를 호출하는 백그라운드 작업자가 실행됩니다. 백그라운드 작업자가 데이터 테이블을 반환하고 백그라운드 작업자가 완료 한 메서드는 데이터 표 데이터 원본을 데이터 테이블로 설정하고 모든 작업이 정상적으로 수행됩니다. 배경 작업자 진행률이 변경된 메서드를 사용하여 각 데이터 테이블 열이 채워질 때마다 데이터 표를 업데이트하려고하면 문제가 발생합니다. 배경 작업자가 실행 중일 때 작동하지만 그리드가 끝나고 양식이 응답하지 않게되면 작동합니다. 몇 분. 나는 이것이 왜 있는지 알아 내려고 애 쓰고 있습니다.배경 작업자 업데이트 진행 중 DataGridview가 멈춤

코드 예제 : 연습 전으로

DataTable dt = e.Result as DataTable, 

: RunWorkerCompled() 이벤트 핸들러에서

backroundWorker_DoWork(.........) 
{ 
    DataTable dt = new DataTable(); 
    DataRow dr; 

    //Get datatable from argument 
    DataTable dt2 = e.Argument as DataTable 

    //get list of AD groups to check 
    for (int i = 0; i > dt2.Rows.Count; i++) 
    { 
     columnName = dt2.Rows[i][0].ToString(); 
     groupName = dt2.Rows[i][1].ToString(); 

     //Call Method to get users from nested AD groups 
     GetADUsers(groupName) 

     //Add users returned from above method to DataTable dt 
     //.......... 


     //Send DataTable to Report Progress 
     backgroundWorker.ReportProgress(0, dt); 

    } 


    e.Result = dt; 

} 


backroundWorker_ProgressChanged(..........) 
{ 
    DataTable dt = e.UserState as DataTable; 
    dataGridView1.DataSource = dt; 
} 


backroundWorker_RunWorkerCompleted(..........) 
{ 
    DataTable dt = e.UserState as DataTable; 
    dataGridView1.DataSource = dt; 
} 

답변

0

, 당신은 즉, 코드가 같아야 대신 e.UserState의 e.Result를 사용해야합니다 RunWorkerCompleted 이벤트에서 결과를 읽는 동안 e.Error! = null 구문을 사용하여 오류를 확인해야합니다. 아래 MSDN 링크에서 백그라운드 작업자 구성 요소를 사용하는 전체 ComputeFibonacci 예제를 참조하십시오.

http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx