2014-04-22 29 views
0
private void button1_Click(object sender, EventArgs e) 
{ 
    Process p1 = new Process(); 
    p1.StartInfo.FileName 
     = @"D:\Softwares\ftrScanApiEx_v3.2\ftrScanApiEx_v3.2\ftrScanApiEx.exe"; 
    p1.EnableRaisingEvents = true; 
    p1.Exited += new EventHandler(p1_Exited); 
    p1.Start(); 
} 

private void p1_Exited(object sender, EventArgs e) 
{ 
    Form3 f3 = new Form3(); 
    f3.Show(); 
    this.Hide(); 
} 

即使没有错误,Form3不会加载..任何想法为什么?使用eventhandler加载另一个表格

+0

该过程是否真的退出? –

+1

我猜测它可能与线程有关。无法保证p1_Exited在您的GUI线程上被调用(很可能不会)。尝试在该事件中使用invoke来调用Hide和Show方法。 –

+0

@NathanA你说的对,但是应该抛出'InvalidOperationException'不是吗?我想程序根本不退出 –

回答

2

我认为,正如正在运行的评论中指出的那样,这确实是一个线程问题。在创建Form3之前调用UI线程。检查InvokeRequired和调用

private void p1_Exited(object sender, EventArgs e) 
{ 
    if (this.InvokeRequired) 
    { 
     this.Invoke(new Action(OnProcessExited)); 
    } 
    else 
    { 
     OnProcessExited(); 
    } 
} 

private void OnProcessExited() 
{ 
    Form3 f3 = new Form3(); 
    f3.Show(); 
    this.Hide(); 
} 
+0

thanx它适用于我:) – Legend

相关问题