自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C# SingleInstance類淺析

開發(fā) 后端
這里介紹C# SingleInstance類實(shí)現(xiàn)只允許一個實(shí)例運(yùn)行,Program為測試主程序入口,在代碼中標(biāo)識說明文字。
本文是針對《基于.Net平臺應(yīng)用程序唯一運(yùn)行實(shí)例實(shí)現(xiàn)》的補(bǔ)充,文章給出功能實(shí)現(xiàn)代碼,其中C# SingleInstance類實(shí)現(xiàn)只允許一個實(shí)例運(yùn)行,Program為測試主程序入口。在代碼中標(biāo)識說明文字。

C# SingleInstance類代碼:

  1. usingSystem;  
  2. usingSystem.IO;  
  3. usingSystem.Diagnostics;  
  4. usingSystem.Threading;  
  5. usingSystem.Reflection;  
  6. usingSystem.Runtime.InteropServices;  
  7.  
  8. namespaceZhengzuo.CSharpCode  
  9. {  
  10. ///<summary> 
  11. ///只啟動一個應(yīng)用程序?qū)嵗刂祁? 
  12. ///</summary> 
  13. publicstaticclassSingleInstance  
  14. {  
  15. privateconstintWS_SHOWNORMAL=1;  
  16. [DllImport("User32.dll")]  
  17. privatestaticexternboolShowWindowAsync(IntPtrhWnd,intcmdShow);  
  18. [DllImport("User32.dll")]  
  19. privatestaticexternboolSetForegroundWindow(IntPtrhWnd);  
  20. //標(biāo)志文件名稱  
  21. privatestaticstringrunFlagFullname=null;  
  22. //聲明同步基元  
  23. privatestaticMutexmutex=null;  
  24.  
  25. ///<summary> 
  26. ///staticConstructor  
  27. ///</summary> 
  28. staticSingleInstance()  
  29. {  
  30. }  
  31.  
  32. #regionapi實(shí)現(xiàn)  
  33. ///<summary> 
  34. ///獲取應(yīng)用程序進(jìn)程實(shí)例,如果沒有匹配進(jìn)程,返回Null  
  35. ///</summary> 
  36. ///<returns>返回當(dāng)前Process實(shí)例</returns> 
  37. publicstaticProcessGetRunningInstance()  
  38. {  
  39.  
  40. ProcessProcesscurrentProcess=Process.GetCurrentProcess();//獲取當(dāng)前進(jìn)程  
  41. //獲取當(dāng)前運(yùn)行程序完全限定名  
  42. stringcurrentFileName=currentProcess.MainModule.FileName;  
  43. //獲取進(jìn)程名為ProcessName的Process數(shù)組。  
  44. Process[]processes=Process.GetProcessesByName(currentProcess.ProcessName);  
  45. //遍歷有相同進(jìn)程名稱正在運(yùn)行的進(jìn)程  
  46. foreach(Processprocessinprocesses)  
  47. {  
  48. if(process.MainModule.FileName==currentFileName)  
  49. {  
  50. if(process.Id!=currentProcess.Id)//根據(jù)進(jìn)程ID排除當(dāng)前進(jìn)程  
  51. returnprocess;//返回已運(yùn)行的進(jìn)程實(shí)例  
  52. }  
  53. }  
  54. returnnull;  
  55. }  
  56.  
  57. ///<summary> 
  58. ///獲取應(yīng)用程序句柄,設(shè)置應(yīng)用程序前臺運(yùn)行,并返回bool值  
  59. ///</summary> 
  60. publicstaticboolHandleRunningInstance(Processinstance)  
  61. {  
  62. //確保窗口沒有被最小化或最大化  
  63. ShowWindowAsync(instance.MainWindowHandle,WS_SHOWNORMAL);  
  64. //設(shè)置真實(shí)例程為foregroundwindow  
  65. returnSetForegroundWindow(instance.MainWindowHandle);  
  66. }  
  67.  
  68. ///<summary> 
  69. ///獲取窗口句柄,設(shè)置應(yīng)用程序前臺運(yùn)行,并返回bool值,重載方法  
  70. ///</summary> 
  71. ///<returns></returns> 
  72. publicstaticboolHandleRunningInstance()  
  73. {  
  74. Processp=GetRunningInstance();  
  75. if(p!=null)  
  76. {  
  77. HandleRunningInstance(p);  
  78. returntrue;  
  79. }  
  80. returnfalse;  
  81. }  
  82.  
  83. #endregion  
  84.  
  85. #regionMutex實(shí)現(xiàn)  
  86. ///<summary> 
  87. ///創(chuàng)建應(yīng)用程序進(jìn)程Mutex  
  88. ///</summary> 
  89. ///<returns>返回創(chuàng)建結(jié)果,true表示創(chuàng)建成功,false創(chuàng)建失敗。</returns> 
  90. publicstaticboolCreateMutex()  
  91. {  
  92. returnCreateMutex(Assembly.GetEntryAssembly().FullName);  
  93. }  
  94.  
  95. ///<summary> 
  96. ///創(chuàng)建應(yīng)用程序進(jìn)程Mutex  
  97. ///</summary> 
  98. ///<paramnameparamname="name">Mutex名稱</param> 
  99. ///<returns>返回創(chuàng)建結(jié)果,true表示創(chuàng)建成功,false創(chuàng)建失敗。</returns> 
  100. publicstaticboolCreateMutex(stringname)  
  101. {  
  102. boolresult=false;  
  103. mutex=newMutex(true,name,outresult);  
  104. returnresult;  
  105. }  
  106.  
  107. ///<summary> 
  108. ///釋放Mutex  
  109. ///</summary> 
  110. publicstaticvoidReleaseMutex()  
  111. {  
  112. if(mutex!=null)  
  113. {  
  114. mutex.Close();  
  115. }  
  116. }  
  117.  
  118. #endregion  
  119.  
  120. #region設(shè)置標(biāo)志實(shí)現(xiàn)  
  121. ///<summary> 
  122. ///初始化程序運(yùn)行標(biāo)志,如果設(shè)置成功,返回true,已經(jīng)設(shè)置返回false,設(shè)置失敗將拋出異常  
  123. ///</summary> 
  124. ///<returns>返回設(shè)置結(jié)果</returns> 
  125. publicstaticboolInitRunFlag()  
  126. {  
  127. if(File.Exists(RunFlag))  
  128. {  
  129. returnfalse;  
  130. }  
  131. using(FileStreamfs=newFileStream(RunFlag,FileMode.Create))  
  132. {  
  133. }  
  134. returntrue;  
  135. }  
  136.  
  137. ///<summary> 
  138. ///釋放初始化程序運(yùn)行標(biāo)志,如果釋放失敗將拋出異常  
  139. ///</summary> 
  140. publicstaticvoidDisposeRunFlag()  
  141. {  
  142. if(File.Exists(RunFlag))  
  143. {  
  144. File.Delete(RunFlag);  
  145. }  

以上介紹C# SingleInstance類

【編輯推薦】

  1. 如何用C#和ADO.NET訪問
  2. 淺析C# Switch語句
  3. C#驗(yàn)證輸入方法詳解
  4. 簡單介紹C# 匿名方法
  5. C# FileSystemWatcher對象
責(zé)任編輯:佚名 來源: 天極網(wǎng)
相關(guān)推薦

2009-08-21 17:24:06

C# SingleIn

2009-08-06 14:43:10

C# Calculat

2009-08-27 16:18:47

C#類C#結(jié)構(gòu)體

2009-08-20 11:07:07

C#共享內(nèi)存

2009-08-14 17:45:52

C# ArrayLis

2009-08-17 18:34:50

C# ChangeCo

2009-08-07 17:25:37

C# SortedLi

2009-08-12 16:46:22

C#讀取XML文檔

2009-08-13 14:06:37

C#結(jié)構(gòu)體結(jié)構(gòu)體和類的區(qū)別

2009-08-25 17:59:49

C#入門

2009-07-30 18:36:00

C#接口C#抽象類

2009-08-20 15:10:33

C#正則表達(dá)式

2009-08-20 15:02:41

C#正則表達(dá)式

2009-08-20 14:57:00

C#正則表達(dá)式

2009-08-20 15:06:51

C#正則表達(dá)式

2009-08-18 15:31:07

C# 操作Excel

2009-08-20 14:43:03

C#正則表達(dá)式Rege

2009-08-18 10:30:30

C#枚舉

2009-08-11 14:45:41

C# DataGrid

2009-08-10 14:43:03

C#函數(shù)Convert
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號