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