2009-08-17 10 views
9

「現在ファイルを検索中です...」、「見つかった選択...」などの文字列をバックグラウンドワーカーからWindows.formにレポートするにはどうすればよいですか?さらに、私はbackgroundWorker_Workで実行したいメソッドを含む大きなクラスを持っています。私はClass_method()によってそれを呼び出すことができます。しかし私は、doneWorker_Workメソッドからのみ、完了したパーセンテージや呼び出されたクラスからの何かを報告することができません。C#backgroundWorkerは文字列を報告しますか?

ありがとうございます!

答えて

22

私はWCFも方法

public void ReportProgress(int percentProgress, Object userState); 

だから単なる文字列を報告しuserStateを使用していると仮定しています。

private void worker_DoWork(object sender, DoWorkEventArgs e) 
{ 
//report some progress 
e.ReportProgress(0,"Initiating countdown"); 

// initate the countdown. 
} 

そして、あなたが取得しますProgressChangedイベントに戻って文字列 "カウントダウンの開始" という

private void worker_ProgressChanged(object sender,ProgressChangedEventArgs e) 
{ 
    statusLabel.Text = e.UserState as String; 
} 
0

デリゲートを使用します。

9

ReportProgressというuserStateパラメータを使用して、その文字列を報告することができます。

はここでMSDNからの例です:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
{ 
    // This method will run on a thread other than the UI thread. 
    // Be sure not to manipulate any Windows Forms controls created 
    // on the UI thread from this method. 
    backgroundWorker.ReportProgress(0, "Working..."); 
    Decimal lastlast = 0; 
    Decimal last = 1; 
    Decimal current; 
    if (requestedCount >= 1) 
    { AppendNumber(0); } 
    if (requestedCount >= 2) 
    { AppendNumber(1); } 
    for (int i = 2; i < requestedCount; ++i) 
    { 
     // Calculate the number. 
     checked { current = lastlast + last; } 
     // Introduce some delay to simulate a more complicated calculation. 
     System.Threading.Thread.Sleep(100); 
     AppendNumber(current); 
     backgroundWorker.ReportProgress((100 * i)/requestedCount, "Working..."); 
     // Get ready for the next iteration. 
     lastlast = last; 
     last = current; 
    } 

    backgroundWorker.ReportProgress(100, "Complete!"); 
} 
関連する問題