长时间运行任务的视觉反馈

本文关键字:视觉 运行 任务 长时间 | 更新日期: 2023-09-27 17:50:57

我有一个长时间运行的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
    }
}

这可能会有所帮助:任务本身并没有花费太多时间,但可能会有很多任务。

有什么建议吗?因为我给了一个目录作为参数,我想我会查看任务将执行多少次,然后相应地更新进度条,在后台工作器中运行任务和更新代码,注意交叉线程访问问题。

长时间运行任务的视觉反馈

你可以将工作移到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);
}