无需用户交互即关闭WPF对话框

时间:2016-08-01 09:54:16

标签: c# wpf modal-dialog

我想在某些IO操作期间显示对话框,然后在它之后使用代码关闭对话框。 类似的东西:

DialogWindow dialog = new DialogWindow();
dialog.ShowDialog();
.... do some file operation....
dialog.Close();

但对话框不会关闭。我必须自己关闭它。在这里如何用代码关闭它?

4 个答案:

答案 0 :(得分:0)

尝试使用.Show(),而不是ShowDialog()。如果你使用ShowDialog,新窗口是模态的,所以你必须手动关闭窗口,然后才能到达codice对话框。关闭()。

答案 1 :(得分:0)

您不能使用ShowDialog(),因为它会阻止当前线程。

您可以在流程运行时禁用所有者窗口,然后像这样启用它('此'是所有者窗口)(您必须小心处理错误和异常,当然):

    async private void Button_Click(object sender, RoutedEventArgs e)
{
  Window1 win = new Window1();
  this.IsEnabled = false;
  win.Show();
  await Task.Run(() =>
    {
      Thread.Sleep(2000);
    });

  win.Close();
  this.IsEnabled = true;
}

另一种方法是在打开的对话框中运行文件操作(使用ShowDialog()打开),而不是在主窗口中运行。

答案 2 :(得分:0)

如果使用ShowDialog(),则可以使用以下代码关闭对话框。

(this.Parent作为Window).Close();

答案 3 :(得分:0)

DialogWindow dialog = new DialogWindow();
Task.Run(()=>
{
    .... do some file operation....
    Dispatcher.BeginInvoke((Action)dialog.Close);
});
dialog.ShowDialog();