我有一个问题,即使查看了各种与Dispatcher.Invoke相关的信息,仍然无法解决。
有一个MainWindow创建了一个任务,并启动该任务,然后打开一个进度窗口。当任务完成时,我需要关闭进度窗口。这是我的代码:
private void Button_Click(object sender, RoutedEventArgs e)
{
Task task = new Task(_vm.WriteToDB);
task.ContinueWith(ExceptionHandler, TaskContinuationOptions.OnlyOnFaulted);
task.ContinueWith(RanToCompletion, TaskContinuationOptions.OnlyOnRanToCompletion);
task.Start();
_frmProgress = new Progress(task);
_frmProgress.DataContext = _vm;
_vm.ProgressText = "Connecting to update server...";
_frmProgress.ShowDialog();
}
public void RanToCompletion(Task task)
{
Progress.FormCloseDelegate FormCloseDelegate = new Progress.FormCloseDelegate(_frmProgress.Close);
if (_frmProgress.Dispatcher.CheckAccess())
_frmProgress.Close();
else
_frmProgress.Dispatcher.Invoke(DispatcherPriority.Normal, FormCloseDelegate);
}
FormCloseDelegate在进度窗口中定义:
public delegate void FormCloseDelegate();
使用以上当前的实现方式,代码可以编译并运行,但任务完成后进度表单没有关闭。有什么想法吗?
我也很乐意接受其他解决方案。也许我本来就走了错误的道路。
谢谢!