从BackgroundWorker.RunWorkerSync方法中引发OnProgressChanged事件的正确方法
本文关键字:方法 事件 OnProgressChanged BackgroundWorker RunWorkerSync | 更新日期: 2023-09-27 18:22:16
我目前有一个BackgroundWorker(BGW),用于输出一系列报告。为此,我调用RunWorkerSync并传递几个必需的参数。
我的问题是,如何在单独线程上运行的代码中引发BGW的OnProgressChanged事件?我的程序输出18个报告,其中一些需要一段时间才能执行,我想用定期的进度更新来更新我的UI。这样做是否正确?
我想您正在寻找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);
}
}
}
希望这能涵盖你的问题。