[C#] 等待启动的进程执行完毕
生活随笔
收集整理的這篇文章主要介紹了
[C#] 等待启动的进程执行完毕
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有能有時候我們啟動了一個進程,必須等到此進程執行完畢,或是,一段時間,
關閉進程后再繼續往下走。
?
Example
sample1
等待應用程序執行完畢
//等待應用程序執行完畢private void btnProcessIndefinitely_Click(object sender, EventArgs e) {//配置文件案路徑string target = System.IO.Path.Combine(Application.StartupPath,@"Test.txt");//取得完整絕對路徑target = System.IO.Path.GetFullPath(target);//啟動進程Process p = Process.Start(target);//讓 Process 組件等候相關的進程進入閑置狀態。 p.WaitForInputIdle();//設定要等待相關的進程結束的時間,并且阻止目前的線程執行,直到等候時間耗盡或者進程已經結束為止。 p.WaitForExit();if (p != null) {p.Close();p.Dispose();p = null;}this.Close();}?
sample2
等待應用程序(7秒)
//等待應用程序(7秒)private void btnWaitProcessfor7_Click(object sender, EventArgs e) {//配置文件案路徑string target = System.IO.Path.Combine(Application.StartupPath, @"Test.txt");//取得完整絕對路徑target = System.IO.Path.GetFullPath(target);//啟動進程Process p = Process.Start(target);//讓 Process 組件等候相關的進程進入閑置狀態。 p.WaitForInputIdle();//設定要等待相關的進程結束的時間,這邊設定 7 秒。 p.WaitForExit(7000);//若應用程序在指定時間內關閉,則 value.HasExited 為 true 。//若是等到指定時間到了都還沒有關閉程序,此時 value.HasExited 為 false,則進入判斷式if (!p.HasExited) {//測試進程是否還有響應if (p.Responding) {//關閉用戶接口的進程p.CloseMainWindow();} else {//立即停止相關進程。意即,進程沒回應,強制關閉p.Kill();}}if (p != null) {p.Close();p.Dispose();p = null;}this.Close();}?
sample3
使用多線程等候應用程序(7秒)
以上兩種方法,在等待進程完成時,窗體畫面會 lock 住,無法重繪,這邊提供一個改善的方法,
若有其他方法,望前輩指導。
?
//使用多線程等候應用程序(7秒)private void btnMultiThreadWaitProcess_Click(object sender, EventArgs e) {//建立線程對象Thread thread = new Thread(new ThreadStart(StartProcess));//啟動線程thread.Start();//等待線程處理完畢while (thread.ThreadState == System.Threading.ThreadState.Running ||thread.ThreadState == System.Threading.ThreadState.WaitSleepJoin) {Application.DoEvents();}this.Close(); }private void StartProcess() {//配置文件案路徑string target = System.IO.Path.Combine(Application.StartupPath, @"Test.txt");//取得完整絕對路徑target = System.IO.Path.GetFullPath(target);//啟動進程Process p = Process.Start(target);//讓 Process 組件等候相關的進程進入閑置狀態。 p.WaitForInputIdle();//設定要等待相關的進程結束的時間,這邊設定 7 秒。 p.WaitForExit(7000);//若應用程序在指定時間內關閉,則 value.HasExited 為 true 。//若是等到指定時間到了都還沒有關閉程序,此時 value.HasExited 為 false,則進入判斷式if (!p.HasExited) {//測試進程是否還有響應if (p.Responding) {//關閉用戶接口的進程p.CloseMainWindow();} else {//立即停止相關進程。意即,進程沒回應,強制關閉p.Kill();}}if (p != null) {p.Close();p.Dispose();p = null;}}源代碼
TestProcessWaitting.rar
轉載于:https://www.cnblogs.com/qqhfeng/p/4769524.html
總結
以上是生活随笔為你收集整理的[C#] 等待启动的进程执行完毕的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux下git的简单运用
- 下一篇: UIView 学习知识点