4
即使在查看關於Dispatcher.Invoke的各種信息後,我仍然無法解決問題。使用Dispatcher.Invoke從WPF中的不同線程關閉窗口
有一個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();
通過上面的當前實現,代碼可以編譯和運行,但一旦任務完成進度的形式沒有關閉。有任何想法嗎?
我也打開其他想法來解決這個問題。也許我完全走錯了路。
謝謝。
你有沒有嘗試過的,而不是調用BeginInvoke的:
我意識到,我並不需要在所有的自定義委託後更新RanToCompletion方法? – 2012-07-31 19:39:17
是的,與BeginInvoke的結果相同。 – ChrisO 2012-07-31 19:41:13
試過DispatcherPriority.Send?它可能正在排隊,並且在您的進度對話框退出之前不會調度。 – 2012-07-31 19:43:34