WPF Best指向从BackgroundWorker更新进度条

ton*_*oni 7 wpf backgroundworker progress-bar

我有一个需要很长时间才能执行的任务.为了通知用户进度,我有一个我在里面更新的进度条DoWork.

有人能告诉我这是否是更新进度条的最佳方法?我听说有一个ReportProgress事件处理程序,但我很困惑,因为我不确定的目的ReportProgress.

Sco*_*t J 10

由于后台工作程序在单独的线程中工作,因此如果您尝试访问UI对象,则会遇到问题.从DoWork处理程序内部调用worker上的ReportProgress方法会引发ProgressChanged事件.应该在UI线程中处理该事件,以便轻松访问该控件.

        BackgroundWorker worker = new BackgroundWorker();
        worker.DoWork += DoWorkHandler;
        worker.WorkerReportsProgress = true;
        worker.ProgressChanged += (s, e) => 
            { myProgressBar.Value = e.ProgressPercentage; };

        worker.RunWorkerAsync();
Run Code Online (Sandbox Code Playgroud)

...

    public void DoWorkHandler(object sender, DoWorkEventArgs e)
    {
        BackgroundWorker worker = sender as BackgroundWorker;

        while (working)
        {
            // Do Stuff

            worker.ReportProgress(progressPercentage);
        }
    }
Run Code Online (Sandbox Code Playgroud)


Mua*_*Dib 0

ReportProgress 是您用来更新任务进度的工具,包括 UI 之类的内容 - 在您的例子中是进度条。

您应该查看位于此处的 MSDN 文档。

基本上,您为 ReportProgress 事件创建一个处理程序,然后在 DoWorkEventHandler 中调用 ReportProgress,如下所示:

worker.ReportProgress((i * 10));
Run Code Online (Sandbox Code Playgroud)