2014-01-08 26 views
1

我是新来的c#,我发现它与我的PHP起源很不一样,所以我可能会完全错误。不过从我的理解来看,这相当准确。基本上我需要启动一个按钮单击我的表单(该部分完美工作)的程序,然后当用户关闭程序我需要运行一个动作,在这种情况下,我显示一个消息框。如何在程序关闭后运行操作?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 
using System.Windows.Forms; 

namespace usb 
{ 
    class Applications 
    { 
     //condition variables 
     public static bool CalcStatus = false; 

     public static void Calc() 
     { 
      Process CALC; 
      CALC = Process.Start("calc.exe"); 
      if (CALC.HasExited) 
      { 
       MessageBox.Show("CALC has exited"); 
       CalcStatus = true; 
      } 
     } 
    } 
} 

这个片段是一个类的一部分,和其他类使用这个功能,当它被称为钙会打开盒子时,计算的关闭将不会与警报弹出。有谁知道我做错了什么?任何更多的指针也欢迎我还在学习:)

+0

[这个答案](http://stackoverflow.com/a/611127)把它描述得很好 – Default

回答

8

您使用Exited事件当进程退出运行一些代码:

CALC.EnableRaisingEvents = true; 
CALC.Exited += (sender, args) => MessageBox.Show("CALC has exited"); 
+0

这做到了!非常感谢 – Halter

0

方法1: 显示消息与等待

//condition variables 
public static bool CalcStatus = false; 

public static void Calc() 
{ 
    var calc = new Process 
    { 
     StartInfo = new ProcessStartInfo 
     { 
      FileName = "calc.exe" 
     } 
    }; 
    calc.Start(); 
    calc.WaitForExit(); 
    MessageBox.Show("CALC has exited"); 
    CalcStatus = true; 
} 

方法2: 查看留言无需等待

//condition variables 
public static bool CalcStatus = false; 

public static void Calc() 
{ 
    var calc = new Process 
    { 
     StartInfo = new ProcessStartInfo 
     { 
      FileName = "calc.exe" 
     }, 
     EnableRaisingEvents = true, 
    }; 
    calc.Exited += calc_Exited; 

    calc.Start(); 
    CalcStatus = true; 
} 

static void calc_Exited(object sender, EventArgs e) 
{ 
    MessageBox.Show("CALC has exited"); 
} 
+0

第一种解决方案是阻止UI线程,这是一个主要问题。 – Servy

+0

您应该使用第二种解决方案,第一种解决方案是澄清两种方法之间的差异。 –

+0

1)如果是这样的话*答案应该说*,因为它是,你的答案似乎主张使用这两种方法。 2)如果您的目标是澄清差异,然后*澄清差异*。你没有解释它们有什么不同,你刚才已经看到了两种解决方案。 – Servy

相关问题