2016-08-14 7 views
-1

進捗状況を報告しないBackrgoundワーカーがあります。パーセンテージではなく正確な値を取得する必要があります。進捗状況の変更イベントをコードする方法がわかりません。 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のオプションの2番目の引数を使用して、あなたによると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のイベントハンドラを宣言していませんでしたイベント。愚かな私。その頭のおかげで、ありがとう:) –

関連する問題