[C#] 等待啟動的進程執行完畢

from:?https://www.cnblogs.com/qqhfeng/p/4769524.html


有能有時候我們啟動了一個進程,必須等到此進程執行完畢,或是,一段時間,

關閉進程后再繼續往下走。

?

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();//執行的進程必須有UI,如果沒有UI,則忽略這個//設定要等待相關的進程結束的時間,并且阻止目前的線程執行,直到等候時間耗盡或者進程已經結束為止。 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;}}     

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458453.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458453.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458453.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

html body標簽

table table 屬性&#xff1a; border &#xff1a;定義表格的邊框寬度&#xff0c;默認為0&#xff0c;即無邊框。<table border"1"> title &#xff1a;表格的提示信息&#xff0c;當鼠標移到表格上方時&#xff0c;所提示的信息。 cellpadding &#xff1a;…

創建字符串的方法

//創建一個字符串常量 NSString *str"字符串"; //創建一個空的字符對象 NSString *str1[[NSString alloc]init];//實例方法 NSString *str2[NSString string];//類方法 //快速創建一個字符串 NSString *str3[[NSString alloc]initWithString:"字符串"];//實…

DataReceivedEventHandler 委托 接收調用執行進程返回數據

https://msdn.microsoft.com/zh-cn/library/azure/system.diagnostics.datareceivedeventhandler備注創建 DataReceivedEventHandler 委托時&#xff0c;需要標識將處理該事件的方法。 若要將事件與事件處理程序關聯&#xff0c;請將該委托的一個實例添加到事件中。 除非移除了…

coreData

CoreData使用 創建步驟流程 第一步先創建.xcdatamodeld文件&#xff08;New File -> iOS -> Core Data ->Data Model&#xff09; 屏幕快照 2016-07-07 下午10.40.16.png名字雖然可以任意取&#xff0c;但最好還是取和自己存儲數據庫名字一樣的名字。這樣可讀性更高些…

命令行下mysql新建用戶及分配權限

創建用戶&#xff1a; CREATE USER usernamehost IDENTIFIED BY password; 說明:username – 你將創建的用戶名, host – 指定該用戶在哪個主機上可以登陸,如果是本地用戶可用localhost, 如 果想讓該用戶可以從任意遠程主機登陸,可以使用通配符%. password – 該用戶的登陸密…

PetaPoco初體驗(轉)

PetaPoco初體驗&#xff08;轉&#xff09; PetaPoco初體驗&#xff08;轉&#xff09;大部分轉自&#xff1a; http://landyer.com/archives/138 PetaPoco C#微型ORM框架&#xff0c;基本無需配置&#xff0c;僅由單個cs文件構成&#xff0c;支持.net3.5 .net4.0。 截稿時Peta…

iOS當中的設計模式

代理模式 應用場景&#xff1a;當一個類的某些功能需要由別的類來實現&#xff0c;但是又不確定具體會是哪個類實現。 優勢&#xff1a;解耦合 敏捷原則&#xff1a;開放-封閉原則 實例&#xff1a;tableview的 數據源delegate&#xff0c;通過和protocol的配合&#xff0c…

c#的dllimport使用方法詳解

DllImport是System.Runtime.InteropServices命名空間下的一個屬性類&#xff0c;其功能是提供從非托管DLL&#xff08;托管/非托管是微軟的.net framework中特有的概念&#xff0c;其中&#xff0c;非托管代碼也叫本地&#xff08;native&#xff09;代碼。與Java中的機制類似&…

each函數循環數據表示列舉,列舉循環的時候添加dom的方法

var dotBox $(#bannerNum);var item <li></li>;var itemSize $(#bannerBack p).length;var dotBoxWidth itemSize*24;$(#bannerBack p).each(function () { dotBox.append(<li></li>); dotBox.find(li).eq(0).addClass(current);});這里要根…

使用lxml代替beautifulsoup

深入使用過lxml的都會深深地喜歡上它,雖然BeautifulSoup很流行,但是深入了解lxml后,你就再也不會使用bs了 我覺得beautifulsoup不好用,速度也慢(雖然可以使用lxml作為解析器了).另外soup.find_all這種簡直就是手工時代的操作(很多人使用find find_all這幾個函數, 其實它們使用起…

QT調用dll且進入DLL src code調試

qt應用程序AA.exe調用qt寫的BB.DLL時&#xff0c;進入BB.DLL src code調試 1、debug生成AA.exe 2、將debug生成的AA.exe整包debug folder放到BB.dll的debug生成的文件夾中 3、設置BB.dll這個project&#xff1a;項目----運行-----Executable中選擇BB.dll的debug文件夾中的AA.ex…

php安裝編譯時 configure: error: Cannot find OpenSSL's evp.h

yum install error: protected multilib versions errorsudo yum downgrade openssl 降級sudo yum install openssl-devel 另外參考yum install -y ncurses-devel yum install openssl openssl-develyum install openssl openssl-devel --setoptprotected_multilibfalse ln -s …

laravel項目中css樣式表的背景圖片不顯示

剛學laravel&#xff0c;遇到了很多坑&#xff0c;感覺laravel是挺強大的。 建好后臺項目&#xff0c;奈何css樣式表的背景圖片不顯示 .mainhd {background: url(../images/sky/body_bg.png) repeat-x 0px 0px; } 按理上面的寫法沒錯&#xff0c;因為是從別的后臺搬過來的&…

KVC KVO

1、KVC&#xff0c;即是指 NSKeyValueCoding&#xff0c;一個非正式的Protocol&#xff0c;提供一種機制來間接訪問對象的屬性。而不是通過調用Setter、Getter方法訪問。KVO 就是基于 KVC 實現的關鍵技術之一。 Demo&#xff1a; interface myPerson : NSObject { …

VS2010中 C++創建DLL圖解

一、DLL的創建 創建項目: Win32->Win32項目&#xff0c;名稱&#xff1a;MyDLL 選擇DLL (D) ->完成. 1、新建頭文件testdll.htestdll.h代碼如下&#xff1a;#ifndef TestDll_H_#define TestDll_H_#ifdef MYLIBDLL#define MYLIBDLL extern "C" _declspec(dllimp…

js理解 call( ) | apply( ) | caller( ) | callee( )

被js的這幾個方法搞的this暈頭轉向&#xff0c;下定決心搞清楚&#xff1b;1、call( )和apply( ):兩者都可以將函數綁定到另外一個對象上去運行&#xff0c;只是參數的傳遞方式不同&#xff0c;兩者都可以使當前函數擁有另一個對象的屬性和方法&#xff0c;實現js下的繼承&…

上傳SVN丟失.a文件的問題

iOS項目上傳到svn中&#xff0c;.a文件丟失 用Cornerstone工具&#xff0c;解決這個問題 1.打開Cornerstone左上角&#xff0c;點Cornerstone->Preferences->Subversion 2.Global lgnores下面有一個Use default global ignores 默認這里方框中會打鉤&#xff08;這就是.a…

使用公用表表達式的遞歸查詢

微軟從SQL2005起引入了CTE(Common Table Expression)以強化T-SQL。公用表表達式 (CTE) 具有一個重要的長處&#xff0c;那就是可以引用其自身。從而創建遞歸 CTE。遞歸 CTE 是一個反復運行初始 CTE 以返回數據子集直到獲取完整結果集的公用表表達式。 當某個查詢引用遞歸 CTE 時…

C#委托實現C++ Dll中的回調函數

from:https://blog.csdn.net/ferrycooper/article/details/63261771很多的Dll都是C和C寫的&#xff0c;那么如果C#想要調用Dll中的函數怎么辦&#xff0c;尤其是Dll函數其中一個參數是函數指針的&#xff0c;即里面有回掉函數的用C#怎么實現&#xff1f; C中的回掉函數在C#中有…

安裝Birt方法

安裝BIRT 方法&#xff1a; 博客地址&#xff1a;http://www.mamicode.com/info-detail-850588.html 注意&#xff1a;在 Install new Software 中輸入地址&#xff1a;http://download.eclipse.org/birt/update-site/4.2-interim 看好了 出來的四項要全部選中 &#xff0c;然后…