Csharp/C#教程:Backgroundworker不会报告进度分享


Backgroundworker不会报告进度

我有一个后台工作程序运行长数据库任务。 我想在任务运行时显示进度条。 不知何故,后台工作人员不会报告任务的进度。

这就是我所拥有的:

BackgroundWorker _bgwLoadClients; _bgwLoadClients = new BackgroundWorker(); _bgwLoadClients.WorkerReportsProgress = true; _bgwLoadClients.DoWork += new DoWorkEventHandler(_bgwLoadClients_DoWork); _bgwLoadClients.RunWorkerCompleted += new RunWorkerCompletedEventHandler(_bgwLoadClients_RunWorkerCompleted); _bgwLoadClients.ProgressChanged += new ProgressChangedEventHandler(_bgwLoadClients_ProgressChanged); _bgwLoadClients.RunWorkerAsync(parms); private void _bgwLoadClients_DoWork(object sender, DoWorkEventArgs e) { DataTable dt = getdate(); e.Result = dt; } void _bgwLoadClients_ProgressChanged(object sender, ProgressChangedEventArgs e) { progressBar1.Value = e.ProgressPercentage; } 

我在WPF中这样做,但我想它不会有所作为。

提前致谢

您需要将DoWork方法分解为可报告的进度,然后调用ReportProgress。

举个例子如下:

 private void Something_DoWork(object sender, DoWorkEventArgs e) { // If possible, establish how much there is to do int totalSteps = EstablishWorkload(); for ( int i=0; i 

如果您的工作无法预先确定,请尝试添加自己的百分比:

 private void Something_DoWork(object sender, DoWorkEventArgs e) { // some work (sender as BackgroundWorker).ReportProgress(25, null); // some work (sender as BackgroundWorker).ReportProgress(50, null); // some work (sender as BackgroundWorker).ReportProgress(60, null); // some work (sender as BackgroundWorker).ReportProgress(99, null); } 

在属性窗口或代码中将backgroundworker对象的WorkReportProgress属性修改为true

您必须手动调用ReportProgress()来引发ProgressChanged事件。

您需要在DoWork方法中调用worker.ReportProgress(percentComplete)。 应根据总工作量计算percentComplete。 例如:

 for(int i =0; i != 100; i++) { // do something worker.ReportProgress(i); } 

有时很难将作业分成几个块来报告进度。 不幸的是,BackgroundWorker没有解决这个问题,你必须自己做。

只报告dowork事件的进展情况

 private void _bgwLoadClients_DoWork(object sender, DoWorkEventArgs e) { int progresValue0to100 = 75; (sender as System.ComponentModel.BackgroundWorker).ReportProgress(progresValue0to100); //do your jobs.. } 

它的工作原理如下

必须通过在BackgroundWorker上调用ReportProgress方法从DoWork事件中发送进度。 在您的情况下,您无法报告任何进度,因为所有工作都在DoWorkfunction之外完成。 您只能在调用getdate()之前和之后报告进度,但是在BackgroundWorker线程忙的情况下不会在调用期间报告进度。

上述就是C#学习教程:Backgroundworker不会报告进度分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1021862.html

(0)
上一篇 2022年1月6日
下一篇 2022年1月6日

精彩推荐