我有一个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();
}
}
}
答案 0 :(得分:2)
造成这种影响的原因可能是在启动该进程的同一UI线程中未引发Y
事件。
当您从另一个线程调用Exited
时,新窗口将不会使用并阻止原始UI线程。
要解决此问题,请检查InvokeRequired
是否为ShowDialog()
并使用Invoke
:
true