在BackgroundWorker中更新Winform上的状态

时间:2010-03-16 14:00:37

标签: winforms progress-bar backgroundworker

我有一个多步骤的BackgroundWorker流程。我使用选取框进度条,因为其中一些步骤在iSeries服务器上运行,因此没有任何好方法可以确定百分比。我想象的是每个步骤后都有更新的标签。您如何建议更新winform上的标签以反映每个步骤?

想想我会多补充一点。我通过iSeries(或IBM i或AS / 400或运行OS / 400的中型计算机... er ... i5 / OS)上的存储过程调用一些CL和RPG程序(该死的IBM因为没有保留相同的名称)年初至年))。

无论如何,我必须等到这一步完全完成才能继续进行winform。我正在考虑向用户发送反馈,给出主要步骤。

  1. 将数据转储到iSeries
  2. 正在运行月末
  3. 创建报告
  4. 上传最终结果
  5. 我可能应该在开始时给出这个。对于那个很抱歉。我尽量保持我的问题足够让别人利用以后而不是我的具体任务。

2 个答案:

答案 0 :(得分:1)

这本质上是背景工作者的观点之一。使用ProgressBar并根据您的算法确定进度有多远。

(如前所述,如果他们是10%,请发送10,如果他们是50%,请发送50

使用BackgroundWorker bgWrk

添加以下事件:

bgWrk.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(bgWrk_ProgressChanged);
// Note: This method is invoked on the UI thread

void bgWrk_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
{
    // Add progress to whatever UI element needs updating. The below simply uses a progress bar.
    prog.Value = e.ProgressPercentage;
}

在您认为值得用户更新的每个主要步骤之后,请执行以下操作:

bgWrk.ReportProgress(intValue);

几点说明:

  • 您也可以在Object方法中传递ReportProgress(),这样您就可以使用字符串对象等更新标签,但进度条仍然是通用符号“坚持,我正在做点什么”

  • 如果您有任何不确定的轮询,并且您使用的是ProgressBar,请尝试将其用作Indeterminate ProgressBar或微调器等。 WPF有一个内置属性,可以使进度条不确定,这很有用。

答案 1 :(得分:0)

有多少步骤?如果有10个步骤,只需在成功完成的每个步骤结束时使用10%步进标记。