使用C#和.Net時特定的Windows應用程序終止/關閉是否可以通知?它可以是任何應用程序,即在Windows作業列表中偵聽。偵聽另一個應用程序的退出
2
A
回答
0
是使用System.Diagnostics。我之前編寫過一個程序會殺死應用程序的雙重實例。我不認爲有一些事件可以連接到特定程序關閉時監視,但是您可以定期檢查程序是否仍然存在於進程列表中,並且即使找不到它也會觸發。
if(!Process.GetProcesses().Any(p => p.ProccessId == Id)); { //or Process Name
//Your logic here
}
2
可以使用WaitForExit
方法是這樣的:
var process = Process.GetProcessById(process_id);
process.WaitForExit();
這將導致執行的線程等到進程已退出。
如果你不想阻塞線程,而是收到通知時,進程已經退出,你可以使用以下命令:
public static void NotifyOnProcessExits(Process process, Action action)
{
Task.Run(() => process.WaitForExit()).ContinueWith(t => action());
}
而且使用這樣的:
NotifyOnProcessExits(process,() => Console.WriteLine("Process has exited"));
請注意,此解決方案將保持一個線程池線程等待進程退出。你也許能夠找到一個真正異步的更好的解決方案,但我不確定。
0
你可以註冊過程,然後通過獲得使用
ThreadPool.RegisterWaitForSingleObject
這將使您的應用程序,目前正在進行的監測按預期運行事件通知,而不會被阻擋。
請參閱here。
相關問題
- 1. AngularJs應用程序無法從另一個窗口偵聽localStorage更改
- 2. Android - 應用程序可以偵聽由另一個應用程序觸發的事件嗎?
- 3. 在Angular應用程序中偵聽socket.io
- 4. 設置自定義偵聽器來偵聽整個應用程序
- 5. 無法連接到一個應用程序正在偵聽
- 6. 另一個應用程序如何在android上退出?
- 7. 配置AppContextListener類的應用程序偵聽器時出錯
- 8. 配置類com.sun.xml.ws.transport.http.servlet.WSServletContextListener的應用程序偵聽器時出錯
- 9. 配置類的應用程序偵聽器時出錯
- 10. 配置類org.apache.struts2.tiles.StrutsTilesListener的應用程序偵聽器時出錯
- 11. Swing應用程序在Grails應用程序中偵聽更改
- 12. 將一個事件偵聽器更改爲另一個事件偵聽器?
- 13. 停止線程從另一個線程c偵聽TcpClient#
- 14. 用於遠程應用程序消息的Android偵聽器
- 15. 退出Android應用程序
- 16. 退出Android應用程序
- 17. 退出應用程序Android
- 18. 退出應用程序
- 19. 應用程序不退出:
- 20. 退出iphone應用程序
- 21. 應用程序退出
- 22. OnBackPressed()退出應用程序
- 23. 退出應用程序iOS
- 24. OnBackPressing退出應用程序
- 25. Android:退出應用程序
- 26. 退出Android應用程序
- 27. SegFault退出應用程序
- 28. 退出iPhone應用程序?
- 29. BackButton退出應用程序
- 30. WP7 PhoneGap應用程序後退按鈕退出應用程序
您可以使用[Process.GetProcesses](https://msdn.microsoft.com/en-us/library/system.diagnostics.process.getprocesses(v = vs.110).aspx)定期*檢查進程,並查看您的流程是否仍在列表中。 – Habib
我只是看了一下Process,接下來就是這個調用的事件:Process.Exited Event。我會嘗試那個。 – Sulby
考慮將TaskCompletionSource連接到該事件 –