打开窗口(或对话框)以阻止主窗口而不停止进一步的指令

时间:2012-09-08 15:55:56

标签: c# wpf dialog

我有一个MainWindow,只需单击该按钮即可进行一些可能需要几秒钟的计算。 在那段时间里,我想在MainWindow的中间显示一个对话框(或单独的窗口),说“请等待......”,它会完全阻止它,所以用户在此之前无法做任何事情对话框已关闭。 我尝试创建一个窗口并用window.ShowDialog();打开它,但这当然不会继续说明......

还有其他方法吗?

3 个答案:

答案 0 :(得分:6)

解决方案非常简单 - 您应该将MainForm设置为Show中的父级(不是ShowDialog,如您所注意到的),然后在您自己的表单上调用Enabled = false:

        Form2 f = new Form2();
        f.Show(this);
        this.Enabled = false;

        //do your stuff here

        f.Hide();
        this.Enabled = true;
        f.Dispose();
        f = null;

这里唯一的问题是你不能取消你的过程...但如果你的计算是在另一个线程中,另一个表单的控件将触发他们的处理程序,你可以在另一个线程中取消该工作。

答案 1 :(得分:1)

如何在打开窗口之前在另一个线程上开始计算?

您还可以为计算创建新的DispatcherFrame

或显示Popup并将IsEnabled设置在靠近根的控件上false

或者将代码移动到对话框中的事件,例如Loaded

答案 2 :(得分:1)

您可以尝试使用此代码

不阻止

在您的代码中

    ....
    Thread newThread = new Thread(new ThreadStart(Create));
    newThread.SetApartmentState(ApartmentState.STA);
    newThread.IsBackground = true;
    newThread.Start();
    ....
}

private void Create()
{
    Window1 tempWindow = new Window1();
    tempWindow.Show();       
    System.Windows.Threading.Dispatcher.Run();
}

阻止主窗口

您还可以使用Prism框架,并使用InteractionRequest类来生成窗口

http://msdn.microsoft.com/en-us/library/gg405494%28v=pandp.40%29.aspx