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



我有一个MainWindow,点击按钮会进行一些可能需要几秒钟的计算。在此期间,我想在MainWindow中间显示一个小对话框(或单独的窗口),上面写着"请稍候…",这将完全阻止它,因此用户在关闭此对话框之前无法执行任何操作。我尝试创建一个窗口并用window.ShowDialog();打开它,但这当然不会继续说明。。。

还有其他可行的方法吗?

解决方案非常简单-您应该在Show中将MainForm设置为父窗体(如您所注意到的,不是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;

这里唯一的问题是你不能取消你的进程。。。但是,如果您的计算在另一个线程中,则另一个窗体的控件将触发它们的处理程序,您可以取消另一线程中的工作。

在打开窗口之前在另一个线程上开始计算怎么样?

您也可以为您的计算创建一个新的DispatcherFrame

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

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

您可以尝试使用此代码

无阻塞

在您的代码中

    ....
    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

最新更新