2014-04-22 71 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

相關問題