ton*_*oni 7 wpf backgroundworker progress-bar
我有一个需要很长时间才能执行的任务.为了通知用户进度,我有一个我在里面更新的进度条DoWork.
有人能告诉我这是否是更新进度条的最佳方法?我听说有一个ReportProgress事件处理程序,但我很困惑,因为我不确定的目的ReportProgress.
Sco*_*t J 10
由于后台工作程序在单独的线程中工作,因此如果您尝试访问UI对象,则会遇到问题.从DoWork处理程序内部调用worker上的ReportProgress方法会引发ProgressChanged事件.应该在UI线程中处理该事件,以便轻松访问该控件.
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += DoWorkHandler;
worker.WorkerReportsProgress = true;
worker.ProgressChanged += (s, e) =>
{ myProgressBar.Value = e.ProgressPercentage; };
worker.RunWorkerAsync();
Run Code Online (Sandbox Code Playgroud)
...
public void DoWorkHandler(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
while (working)
{
// Do Stuff
worker.ReportProgress(progressPercentage);
}
}
Run Code Online (Sandbox Code Playgroud)
ReportProgress 是您用来更新任务进度的工具,包括 UI 之类的内容 - 在您的例子中是进度条。
您应该查看位于此处的 MSDN 文档。
基本上,您为 ReportProgress 事件创建一个处理程序,然后在 DoWorkEventHandler 中调用 ReportProgress,如下所示:
worker.ReportProgress((i * 10));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8432 次 |
| 最近记录: |