再帰検索を含むクラスにイベント ハンドラーを追加することで、最終的にこれを実現することができました。ディレクトリ内の各ファイルのファイル オブジェクトの名前を設定するときに、onPropertyChanged イベントを設定します。これを、バックグラウンド ワーカーの DoWork のフォームに結び付けました。次に、イベントがトリガーされたときに進行状況を報告し、バックグラウンド ワーカーの ProgressChanged を使用してテキストを現在のファイル名に設定しました。似たようなことをしようとしている人を助けるために、私のプログラムからいくつかのコード スニペットを示します。
検索クラスで
foreach (string file in Directory.GetFiles(dir))
{
//creating objects for each file in the directory
FileObject fileObject = new FileObject();
FileInfo info = new FileInfo(file);
currentfile = file.ToString();
fileObject.name = info.Name.ToString();
fileObject.path = file.ToString();
fileObject.createdDate = info.CreationTime.ToString();
FileList.Add(fileObject);
//event handler triggered
OnFileNameChanged(name);
}
//event handler code
public event PropertyChangedEventHandler PropertyChanged;
protected void OnFileNameChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
ウィンドウフォームで
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
//do some work
search.PropertyChanged += (s, pe) => backgroundWorker1.ReportProgress(unusedNumber);
backgroundWorker1.ReportProgress(100);
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
//change label
label1.Text = search.currentfile;
}