任务中的ShowDialog方法

时间:2013-12-28 12:18:29

标签: c# wpf mvvm

我在WPF应用程序中使用了一个线程和一个Dispatcher事件。在这里我使用ShowDialog()方法打开新窗口mywindow。我想在mywindow对话框关闭后才在“continuewith”事件中执行loadData()方法。我怎样才能做到这一点?现在,LoadData方法在关闭mywindow对话框之前执行。

Thread thread = new Thread(() =>
{
  Application.Current.Dispatcher.BeginInvoke( new Action( () =>
  {
    Window mywindow = new Window();
    mywindow.ShowDialog();
  } ) );
}.ContinueWith( ( test ) =>
{
  LoadData();
} ) );

2 个答案:

答案 0 :(得分:2)

您正在使用BeginInvoke在UI调度程序上执行asynchronous call,因此即使在等待显示对话框窗口之前,任务也会完成。

你应该使用Invoke进行synchronous call,除非对话窗口打开,否则不会让任务完成。

Application.Current.Dispatcher.Invoke(new Action(() =>
   {
        Window mywindow = new Window();
        mywindow.ShowDialog();
   }

在旁注中,我认为您错误地粘贴了Thread,而应该是Task

        Task thread =Task.Factory.StartNew(() =>
        {
            Application.Current.Dispatcher.Invoke(new Action(() =>
            {
                SecondaryWindow mywindow = new SecondaryWindow(new VM());
                mywindow.ShowDialog();
            }));
        }).ContinueWith((test) =>
        {
            LoadData();
        });

答案 1 :(得分:0)

您应该使用Invoke使用同步调用而不是异步调用。这将是调用LoadData方法。