成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C# SingleInstance類淺析

開發 后端
這里介紹C# SingleInstance類實現只允許一個實例運行,Program為測試主程序入口,在代碼中標識說明文字。
本文是針對《基于.Net平臺應用程序唯一運行實例實現》的補充,文章給出功能實現代碼,其中C# SingleInstance類實現只允許一個實例運行,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. ///只啟動一個應用程序實例控制類  
  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實現  
  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數組。  
  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)//根據進程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實現  
  86. ///<summary> 
  87. ///創建應用程序進程Mutex  
  88. ///</summary> 
  89. ///<returns>返回創建結果,true表示創建成功,false創建失敗。</returns> 
  90. publicstaticboolCreateMutex()  
  91. {  
  92. returnCreateMutex(Assembly.GetEntryAssembly().FullName);  
  93. }  
  94.  
  95. ///<summary> 
  96. ///創建應用程序進程Mutex  
  97. ///</summary> 
  98. ///<paramnameparamname="name">Mutex名稱</param> 
  99. ///<returns>返回創建結果,true表示創建成功,false創建失敗。</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設置標志實現  
  121. ///<summary> 
  122. ///初始化程序運行標志,如果設置成功,返回true,已經設置返回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對象
責任編輯:佚名 來源: 天極網
相關推薦

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#共享內存

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#結構體結構體和類的區別

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#交錯數組

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函數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩欧美在线观看 | 国产精品高潮呻吟久久av黑人 | 国产99久久精品一区二区永久免费 | 亚洲精品高清视频 | 91精品综合久久久久久五月天 | 亚洲一二三在线观看 | 久久精品在线播放 | 国产精品无码专区在线观看 | 久久国产精品视频 | 久久久www成人免费精品 | 中文字幕中文字幕 | 一区二区三区免费在线观看 | 欧美精品在线观看 | 亚洲精品日本 | 欧美高清dvd| 999久久久久久久 | 久久国内精品 | 操操网站 | 欧美精品日韩精品 | 国产精品.xx视频.xxtv | 极品国产视频 | 日韩午夜激情 | 欧美综合精品 | 欧美激情欧美激情在线五月 | 伊人最新网址 | 一区在线播放 | 成人在线一级片 | 美女张开腿露出尿口 | 亚洲精品亚洲人成人网 | 久久国产日韩欧美 | 天天综合久久网 | 欧美久久久久久久久 | 欧美日韩三区 | 五月婷婷在线播放 | 国产97在线看 | 黄色毛片黄色毛片 | 超碰97干| 日韩精品免费视频 | 秋霞影院一区二区 | 国产精品区二区三区日本 | 国产欧美精品一区二区色综合朱莉 |