日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
C#SingleInstance類淺析

本文是針對(duì)《基于.Net平臺(tái)應(yīng)用程序唯一運(yùn)行實(shí)例實(shí)現(xiàn)》的補(bǔ)充,文章給出功能實(shí)現(xiàn)代碼,其中C# SingleInstance類實(shí)現(xiàn)只允許一個(gè)實(shí)例運(yùn)行,Program為測(cè)試主程序入口。在代碼中標(biāo)識(shí)說(shuō)明文字。

C# SingleInstance類代碼:

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

以上介紹C# SingleInstance類


本文題目:C#SingleInstance類淺析
URL分享:http://m.5511xx.com/article/cdjsohc.html