我有一个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