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

时间:2014-09-17 13:20:24

标签: c# .net winforms backgroundworker

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

我的问题是,如何在单独线程上运行的代码中引发BGW的OnProgressChanged事件?我的程序输出了18个报告,其中一些报告需要一段时间才能执行,并且我希望通过定期更新来更新我的UI。这甚至是正确的做法吗?

1 个答案:

答案 0 :(得分:-1)

我认为您正在寻找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);
        }

    }
}

希望涵盖您的问题。