0

私は for-each ループを長時間実行していますが、ユーザーがアプリケーションがクラッシュしたと思わないように、視覚的なユーザー フィードバックを追加する慣用的な方法があるかどうか疑問に思っていました。

private void btnRunLongRunningTask_Click(object sender, EventArgs e)
{
    foreach(string path in Directory.EnumerateFiles(@"path"), "*.ext", SearchOption.AllDirectories))
    {
        var result = LongRunning.Task(path);
        string resultPath = Manipulate(path);
        // write result to resultPath
    }
}

これは役立つかもしれません: タスク自体にそれほど時間がかかるわけではありませんが、多くのタスクが発生する可能性があります。

これを達成する方法について何かアドバイスはありますか? 引数としてディレクトリが与えられているので、タスクが実行される回数を調べ、それに応じてプログレスバーを更新し、バックグラウンド ワーカーでタスクと更新コードを実行し、クロススレッド アクセスに注意することを考えていました。問題。

4

1 に答える 1

4

作業を BackgroundWorker に移動し、ReportProgress メソッドを使用できます。

for (i = 0; i < count; i++)
{
    // do work
    worker.ReportProgress((100 * i) / count);
}

private void MyWorker_ProgressChanged(object sender,
    ProgressChangedEventArgs e)
{
    taskProgressBar.Value = Math.Min(e.ProgressPercentage, 100);
}
于 2013-01-08T15:01:34.040 に答える