1

コレクションに多くのファイルを追加し、それぞれに対して多くのアクションを実行する機能があります。

これにより、プログラム (メイン スレッド) が応答しなくなります。

原因を特定し、問題に対処するにはどうすればよいですか?

4

2 に答える 2

1

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 !
}
于 2012-09-11T11:18:58.183 に答える
0

別のスレッドを使用してください。

Thread t = new Thread(new ThreadStart( () => {
   IntensiveCalculationCode();
}));

t.Start();

ディスパッチャーを呼び出して、スレッド内から UI スレッドを呼び出すこともできます。ただし、Windows フォームと WPF ではまったく同じではありません。

于 2012-09-11T11:13:00.980 に答える