报告操作的进度

时间:2013-10-14 20:29:39

标签: wpf report backgroundworker progress ui-thread

如何在操作中向UI报告操作进度?即,我想做类似的事情:

void DoExpensiveOperation()
{
    var dlg = new ShowProgressDialog();
    dlg.ShowDialog();

    dlg.Status = "StepOne"; 
    dlg.Progress = "10%";
    DoStepOne();

    DoStepTwo();
    dlg.Status = "StepTwo";
    dlg.Progress = "70%";

    DoLastStep();
    dlg.Status = "LastStep";
    dlg.Progress = "100%";

    dlg.Close();
}

显然,由于多种原因,这不起作用。我开始尝试使用后台工作程序来解决这个问题。我在后台线程上完成所有工作,然后简单地将“begin”,“progressChange”和“end”事件分别发送到UI,“ShowDialog”,“report progress”和“close Dialog”。

  • 当引发DoWork事件时,它会调度UI线程以显示对话框
  • 然后继续在后台线程中执行工作
  • 通过将进度通知分派到UI线程
  • 来报告进度
  • 当引发RunWorkerCompleted时,会调用一个调用UI线程来关闭对话框

这有效,......直到我想修改不支持非UI线程修改的集合,例如ObservableCollection。我不想将这些修改发送到UI线程,因为它只会返回,隐藏事物的持续时间(由集合更改触发的事件可能需要一段时间),使对话无意义。

0 个答案:

没有答案
相关问题