我目前有一个BackgroundWorker(BGW),用于输出一系列报告。为此,我调用RunWorkerAsync并传递一些必需的参数。
我的问题是,如何在单独线程上运行的代码中引发BGW的OnProgressChanged事件?我的程序输出了18个报告,其中一些报告需要一段时间才能执行,并且我希望通过定期更新来更新我的UI。这甚至是正确的做法吗?
答案 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);
}
}
}
希望涵盖您的问题。