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