2016-08-14 5 views
-1

진행 상황을보고하지 않는 Backrgound Worker가 있습니다. 정확한 가치가 필요합니다. 비율이 아닙니다. 진행률 변경 이벤트를 코딩하는 방법을 모르겠습니다. 나는 WorkReportsProgress 속성을 true로 설정했다. 나는 아직도 C#에 익숙하지 않아서 가난한 지식을 변명한다.배경 작업자가 진행 상황을보고하지 않습니다.

private void BKGWork_DoWork(object sender, DoWorkEventArgs e) 
    { 
     BackgroundWorker worker = sender as BackgroundWorker; 
     for (int i = 1; i <= 20; i++) 
     { 
      //do work 
      worker.ReportProgress(i); 
     } 
    } 
private void BKGWork_ProgressChanged(object sender, ProgressChangedEventArgs e) 
    { 
     //not sure how to get the exact value of i and compare it to see which loop the background worker is in. 
    } 

답변

1

worker.ReportProgress(0,i);을 사용하면 명시 적 값을 사용자 상태 매개 변수로 전달할 수 있습니다. 첫 번째 매개 변수는 e.ProgressPercentage에서받은 값이 그대로 사용하면 ReportProgress에 전달 무엇이든하는 int

+0

이 방법을 시도했지만 여전히 결과가 없습니다. 콘솔이 완전히 비어 있습니다. –

+0

백그라운드 작업자를 시작하기 위해'RunWorkerAsync'를 호출 했습니까? 그리고 이벤트 처리기가 구독되어 있는지 확인하십시오. – FloatingKiwi

+0

나는 ProgressChanged 이벤트를 선언하지 않았다. 당신의 방법이 효과가 있습니다. –

2

에 캐스팅 e.UserState이 액세스 할 수 있으며, BackgroundWorker 구성 클래스는 당신을 위해 '비율'을 계산할 수 없습니다. 당신이 (예를 들어, 클래스의 인스턴스를 더 복잡한 데이터를 필요한 경우 당신이하지 않은 것 같습니다 아래는 의견을 ReportProgress의 두 번째 선택적 인수를 사용하고에 따르면 UserState 매개 변수

private void BKGWork_DoWork(object sender, DoWorkEventArgs e) 
{ 
    BackgroundWorker worker = sender as BackgroundWorker; 
    for (int i = 1; i <= 20; i++) 
    { 
     //do work 
     worker.ReportProgress(i); 
    } 
} 
private void BKGWork_ProgressChanged(object sender, ProgressChangedEventArgs e) 
{ 
    // This is the value of the variable i passed above 
    Console.WriteLine(e.ProgressPercentage); 
} 

에서 검색 할 수 올바르게 이벤트 처리기를 설정하십시오. 디버거를 사용할 수있는 경우 쉽게 찾을 수 있습니다. ProgressChanged 이벤트 안의 줄에 중단 점 (F9) 넣고 프로그램 (F5) 실행하십시오. 중단 점이 맞지 않으면 확인하십시오 디자이너 또는 코드에서 이벤트 처리기를 올바르게 설정하십시오. 그렇지 않으면 중단 점에 도달하면 Visual Studio의 출력 창을 확인하십시오 (런타임시 NON 콘솔 응용 프로그램에서는 콘솔 출력이 Visual Studio의 출력 창으로 리디렉션 됨)

+0

콘솔에 아무것도 표시되지 않습니다. 완전히 비어 있습니다. –

+0

디버거를 사용할 수 있으면 ProgressChanged 이벤트 내부의 줄에 중단 점을 넣고 프로그램을 실행하십시오. 중단 점이 맞지 않으면 디자이너 또는 코드에서 이벤트 처리기를 올바르게 설정했는지 확인하십시오. 그렇지 않으면 중단 점에 도달하면 출력 창이 표시되지 않습니다 (런타임시 NON 콘솔 응용 프로그램에서 콘솔 출력이 Visual Studio의 출력 창으로 리디렉션 됨) – Steve

+0

ProgressChanged에 대한 이벤트 처리기를 선언하지 않았습니다. 행사. 바보 야. 그 머리를 주셔서 감사합니다 :) –