模态对话框的所有者未被阻止

时间:2019-05-30 08:25:55

标签: c# wpf dialog modal-dialog

在启动主窗口后,将打开一个线程,用于在打开应用程序时检查错误。发现错误后,将显示对话框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仍应阻止主窗口。

0 个答案:

没有答案