从BackgroundWorker.RunWorkerSync方法中引发OnProgressChanged事件的正确方法

本文关键字:方法 事件 OnProgressChanged BackgroundWorker RunWorkerSync | 更新日期: 2023-09-27 18:22:16

我目前有一个BackgroundWorker(BGW),用于输出一系列报告。为此,我调用RunWorkerSync并传递几个必需的参数。

我的问题是,如何在单独线程上运行的代码中引发BGW的OnProgressChanged事件?我的程序输出18个报告,其中一些需要一段时间才能执行,我想用定期的进度更新来更新我的UI。这样做是否正确?

从BackgroundWorker.RunWorkerSync方法中引发OnProgressChanged事件的正确方法

我想您正在寻找ReportProgress我做了一个快速的例子(控制台应用程序)

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            BackgroundWorker bw = new BackgroundWorker();
            bw.DoWork += new DoWorkEventHandler(bw_DoWork);
            bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
            bw.WorkerReportsProgress = true;
            bw.RunWorkerAsync();
            Console.ReadKey();
        }
        static void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            Console.WriteLine("Percentage is:{0}%", e.ProgressPercentage);
        }
        static void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            var self = (sender as BackgroundWorker);
            self.ReportProgress(10);
            Thread.Sleep(1000);
            self.ReportProgress(20);
            Thread.Sleep(1000);
            self.ReportProgress(30);
        }
    }
}

希望这能涵盖你的问题。