對於當前程式,Process.Exited事件並不起作用,如下代碼:
static void Main()
{
var pro = Process.GetCurrentProcess();
pro.EnableRaisingEvents = true;
pro.Exited += new EventHandler(pro_Exited);
}
static void pro_Exited(object sender, EventArgs e)
{
throw new NotImplementedException();
}
結果不會有任何異常拋出。
解決方案是使用AppDomain.ProcessExit,當預設應用程式定義域由於進程退出而卸載時,該事件會被調用:
static void Main()
{
AppDomain.CurrentDomain.ProcessExit += new EventHandler(CurrentDomain_ProcessExit);
}
static void CurrentDomain_ProcessExit(object sender, EventArgs e)
{
throw new NotImplementedException();
}
運行代碼,異常會順利拋出。
但是如果進程遭到強制退出,上面的事件都不會被啟動並執行。
如果用一個程式監控另一個程式的Process.Exited事件,即使另一個進程被強制結束,Process.Exited仍然會啟動並執行。
代碼:
static void Main()
{
//開啟記事本
var pro = new Process();
pro.StartInfo.FileName = "notepad";
pro.EnableRaisingEvents = true;
pro.Exited += new EventHandler(pro_Exited);
pro.Start();
pro.WaitForExit();
}
static void pro_Exited(object sender, EventArgs e)
{
Console.WriteLine("另一個進程已被結束");
}