VB.NET / C# 监控程序进程是否关闭
之前讲解了如何利用 VB.net / C# 打开外部程序,顺便提到了 shell 与 Process.Start 的区别,那么如果我们想监控程序一直到程序进程被关闭,那么我们只能用 Process.Start 来打开程序。因为 Process 给了我们更多的参数来进行追踪,比如PID。
VB代码
1 2 3 4 5 6 7 | Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim proc As New Process proc.StartInfo.FileName = "notepad.exe" proc.Start() proc.WaitForExit() MsgBox("文档已经关闭") End Sub |
C#代码
方法一:利用 WaitForExit 函数等待进程结束
这种方法会阻塞当前进程,直到运行的外部程序退出
1 2 3 4 5 6 7 8 9 | private void button1_Click(object sender, EventArgs e) { System.Diagnostics.Process exep = new System.Diagnostics.Process(); exep.StartInfo.FileName = @"C:\Windows\notepad.exe"; exep.Start(); exep.WaitForExit(); MessageBox.Show("Notepad.exe运行完毕"); } |
方法二:为外部进程添加一个事件监视器,当退出后,获取通知,这种方法时不会阻塞当前进程,你可以处理其它事情
1 2 3 4 5 6 7 8 9 10 11 12 13 | private void button1_Click(object sender, EventArgs e) { System.Diagnostics.Process exep = new System.Diagnostics.Process(); exep.StartInfo.FileName = @"C:\Windows\Notepad.exe"; exep.EnableRaisingEvents = true; exep.Exited += new EventHandler(exep_Exited); exep.Start(); } void exep_Exited(object sender, EventArgs e) { MessageBox.Show("Notepad.exe运行完毕"); } |
对于在C#程序开发中调用外部程序的操作,要判断这个被调用的EXE文件是否执行结束其实最跟本的是 System.Diagnostics.Process类的应用,其中有一个方法,就是WaitForExit();和HasExited属性,这两个也都是为判断外部程序exe文件的执行状态而设计的,HasExited=ture时表示执行结束.