我想在某些IO操作期间显示对话框,然后在它之后使用代码关闭对话框。 类似的东西:
DialogWindow dialog = new DialogWindow();
dialog.ShowDialog();
.... do some file operation....
dialog.Close();
但对话框不会关闭。我必须自己关闭它。在这里如何用代码关闭它?
答案 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();