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