コレクションに多くのファイルを追加し、それぞれに対して多くのアクションを実行する機能があります。
これにより、プログラム (メイン スレッド) が応答しなくなります。
原因を特定し、問題に対処するにはどうすればよいですか?
コレクションに多くのファイルを追加し、それぞれに対して多くのアクションを実行する機能があります。
これにより、プログラム (メイン スレッド) が応答しなくなります。
原因を特定し、問題に対処するにはどうすればよいですか?
BackgroundWorker オブジェクトを使用します。ReportProgress および ProgressChanged イベントを使用して、操作の進行状況をユーザーに通知できます。
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
private void Form1_Load(object sender, EventArgs e)
{
backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
// .. stuff that takes long
backgroundWorker1.ReportProgress(10);
// .. stuff that takes long
backgroundWorker1.ReportProgress(20);
// .. stuff that takes long
backgroundWorker1.ReportProgress(100);
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// Done !
}
別のスレッドを使用してください。
Thread t = new Thread(new ThreadStart( () => {
IntensiveCalculationCode();
}));
t.Start();
ディスパッチャーを呼び出して、スレッド内から UI スレッドを呼び出すこともできます。ただし、Windows フォームと WPF ではまったく同じではありません。