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();
上記の現在の実装では、コードはコンパイルおよび実行されますが、タスクが完了しても進行状況フォームは閉じられません。何か案は?
これを解決するための他のアイデアも歓迎します。たぶん、私は完全に間違った道を進んでしまったのです。
ありがとうございました。