在启动主窗口后,将打开一个线程,用于在打开应用程序时检查错误。发现错误后,将显示对话框A进行通知。对话框A的所有者是主窗口。用户将无法修改主窗口
主窗口中还有一个按钮。当我单击主窗口中的按钮时,将显示对话框B。对话框B的所有者是主窗口。对话框B中有一个计时器,它将在10秒后自动关闭。用户将无法修改主窗口
注意:对话框A和B使用ShowDialog()显示
然后我执行了此操作: 1.单击主窗口中的按钮=>显示对话框B。 (在此期间,我无法修改主窗口,因此是正确的) 2.后台线程显示对话框A =>显示对话框A (在这段时间内,我无法修改主窗口和对话框B,这是我所期望的) 3.已过10秒=>对话框B关闭
在#3中,我认为在关闭对话框B之后,我只能编辑对话框A,因为对话框A应该会阻塞主窗口。但是,我可以同时操作对话框A和主窗口。对话框A并未阻止其所有者主窗口。
我尝试在关闭对话框B后在所有打开的对话框中找到对话框A。 然后调用Activate(),但主窗口仍可编辑。
这是上述情况的示例代码。
主窗口:
public partial class MainWindow : Window
{
DialogA a;
DialogB b;
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Task.Factory.StartNew(() => ShowDialogA());
}
private void ShowDialogA()
{
while (true)
{
Dispatcher.BeginInvoke((Action)(() =>
{
a = new DialogA();
a.Owner = this;
a.ShowDialog();
}));
Thread.Sleep(10000);
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
b = new DialogB();
b.Owner = this;
b.ShowDialog();
}
}
对话框A
public partial class DialogA : Window
{
public DialogA()
{
InitializeComponent();
}
}
对话框B:
public partial class DialogB : Window
{
public DialogB()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Timer t= new Timer();
t.Interval = 5000;
t.Elapsed += CloseThis;
t.Start();
}
private void CloseThis(object sender, EventArgs e)
{
Dispatcher.BeginInvoke((Action)(() =>
{
this.Close();
}));
}
}
即使对话框B关闭,对话框A仍应阻止主窗口。