偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

C# SingleInstance類淺析

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

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. ///只啟動一個應用程序?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. //標志文件名稱  
  21. privatestaticstringrunFlagFullname=null;  
  22. //聲明同步基元  
  23. privatestaticMutexmutex=null;  
  24.  
  25. ///<summary> 
  26. ///staticConstructor  
  27. ///</summary> 
  28. staticSingleInstance()  
  29. {  
  30. }  
  31.  
  32. #regionapi實現(xiàn)  
  33. ///<summary> 
  34. ///獲取應用程序進程實例,如果沒有匹配進程,返回Null  
  35. ///</summary> 
  36. ///<returns>返回當前Process實例</returns> 
  37. publicstaticProcessGetRunningInstance()  
  38. {  
  39.  
  40. ProcessProcesscurrentProcess=Process.GetCurrentProcess();//獲取當前進程  
  41. //獲取當前運行程序完全限定名  
  42. stringcurrentFileName=currentProcess.MainModule.FileName;  
  43. //獲取進程名為ProcessName的Process數(shù)組。  
  44. Process[]processes=Process.GetProcessesByName(currentProcess.ProcessName);  
  45. //遍歷有相同進程名稱正在運行的進程  
  46. foreach(Processprocessinprocesses)  
  47. {  
  48. if(process.MainModule.FileName==currentFileName)  
  49. {  
  50. if(process.Id!=currentProcess.Id)//根據(jù)進程ID排除當前進程  
  51. returnprocess;//返回已運行的進程實例  
  52. }  
  53. }  
  54. returnnull;  
  55. }  
  56.  
  57. ///<summary> 
  58. ///獲取應用程序句柄,設置應用程序前臺運行,并返回bool值  
  59. ///</summary> 
  60. publicstaticboolHandleRunningInstance(Processinstance)  
  61. {  
  62. //確保窗口沒有被最小化或最大化  
  63. ShowWindowAsync(instance.MainWindowHandle,WS_SHOWNORMAL);  
  64. //設置真實例程為foregroundwindow  
  65. returnSetForegroundWindow(instance.MainWindowHandle);  
  66. }  
  67.  
  68. ///<summary> 
  69. ///獲取窗口句柄,設置應用程序前臺運行,并返回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實現(xiàn)  
  86. ///<summary> 
  87. ///創(chuàng)建應用程序進程Mutex  
  88. ///</summary> 
  89. ///<returns>返回創(chuàng)建結果,true表示創(chuàng)建成功,false創(chuàng)建失敗。</returns> 
  90. publicstaticboolCreateMutex()  
  91. {  
  92. returnCreateMutex(Assembly.GetEntryAssembly().FullName);  
  93. }  
  94.  
  95. ///<summary> 
  96. ///創(chuàng)建應用程序進程Mutex  
  97. ///</summary> 
  98. ///<paramnameparamname="name">Mutex名稱</param> 
  99. ///<returns>返回創(chuàng)建結果,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設置標志實現(xiàn)  
  121. ///<summary> 
  122. ///初始化程序運行標志,如果設置成功,返回true,已經(jīng)設置返回false,設置失敗將拋出異常  
  123. ///</summary> 
  124. ///<returns>返回設置結果</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. ///釋放初始化程序運行標志,如果釋放失敗將拋出異常  
  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#驗證輸入方法詳解
  4. 簡單介紹C# 匿名方法
  5. C# FileSystemWatcher對象
責任編輯:佚名 來源: 天極網(wǎng)
相關推薦

2009-08-21 17:24:06

C# SingleIn

2009-08-06 14:43:10

C# Calculat

2009-08-27 16:18:47

C#類C#結構體

2009-08-20 11:07:07

C#共享內(nèi)存

2009-08-07 17:25:37

C# SortedLi

2009-08-14 17:45:52

C# ArrayLis

2009-08-17 18:34:50

C# ChangeCo

2009-08-13 14:06:37

C#結構體結構體和類的區(qū)別

2009-08-12 16:46:22

C#讀取XML文檔

2009-08-25 17:59:49

C#入門

2009-08-12 15:20:21

C#事件處理

2009-08-17 13:34:02

C#異步操作

2009-08-26 13:07:07

C#交錯數(shù)組

2009-08-27 11:43:31

C#語法

2009-08-18 09:24:52

C# Anonymou

2009-08-14 15:23:10

C#使用ErrorPr

2009-08-10 17:36:17

C#擴展方法

2009-08-20 16:15:19

C# 匿名方法

2009-09-10 14:52:55

C# get

2009-07-31 14:03:21

C# Format函數(shù)
點贊
收藏

51CTO技術棧公眾號