3

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

还有其他方法可行吗?

4

3 回答 3

6

解决方案非常简单 - 您应该在 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;

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

于 2012-09-08T16:21:43.817 回答
1

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

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

或在靠近根的控件上显示Popup并设置.IsEnabledfalse

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

于 2012-09-08T15:59:17.237 回答
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

于 2012-09-08T16:02:12.893 回答