ShowDialog()不会阻止原始表单被点击

时间:2016-08-03 16:30:28

标签: c# winforms visual-studio-2015

我有一个winform,其中包含以下代码,可在打开表单时打开外部程序。如果程序关闭,则会弹出一个对话框,弹出一个选项,返回单击按钮的信息。这将关闭对话框并返回初始表单,然后运行该函数再次打开外部程序。

这是问题,原始表单是STILL可点击的并且该功能未运行。有什么想法吗?

    public Manager()
    {
        InitializeComponent();
        ExternalProgramOpen();

    }

    private void ExternalProgramOpen()
    {
        Process startProgram = Process.Start("program.exe", Program.ConnectionArg);
        startProgram.EnableRaisingEvents = true;
        startProgram.Exited += this.PrematureClose;
    }

    private void PrematureClose(object sender, EventArgs e)
    {
        ManagerWarning messagepopup = new ManagerWarning();
        messagepopup.ShowDialog();
        using (var ManagerWarning = new ManagerWarning())
        {
            if (ManagerWarning.ShowDialog() == DialogResult.Retry)
            {
                ExternalProgramOpen();
            }
        }
     }

1 个答案:

答案 0 :(得分:2)

造成这种影响的原因可能是在启动该进程的同一UI线程中未引发Y事件。

当您从另一个线程调用Exited时,新窗口将不会使用并阻止原始UI线程。

要解决此问题,请检查InvokeRequired是否为ShowDialog()并使用Invoke

true