日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用Mutex實現單一程式執行個體的注意事項(转)

發布時間:2023/12/4 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Mutex實現單一程式執行個體的注意事項(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

相信大家都知道在.NET程式中若要實現單一程式執行個體,一般來說有幾種方法,像是去判斷是否已經有開啟的Process是相同的程式、用Mutex與Semaphore之類的技術來判斷是否程式正在開啟。但是很多網路上的文章都忽略了在用Mutex實現單一程式執行個體時,其實會有些必須要注意的地方,導致於在實際運用上沒有發揮到該有的效果。

?

以一個簡單的例子來看,一般我們在網路上常看到的使用方式大概就像下面的程式碼片段類似,建構Mutex時就會回傳該Mutex是否已經存在,利用該回傳值來決定程式應該繼續開啟還是關閉。

?

using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using System.Threading;namespace WindowsFormsApplication10 {static class Program{/// <summary>/// The main entry point for the application./// </summary> [STAThread]static void Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Boolean bCreatedNew;//Create a new mutex using specific mutex nameMutex m = new Mutex(false, "myUniqueName", out bCreatedNew);if (bCreatedNew)Application.Run(new Form1());}} }

這樣的程式到底有什麼樣的問題呢?有興趣的可以試著建置Release的程式看看,其實這樣的程式在某些情況下會在Release模式下失效,Debug的運作卻是正常的,若試不出來的可以再加上個GC.Collect試試,會更容易重現。

... Boolean bCreatedNew;//Create a new mutex using specific mutex name Mutex m = new Mutex(false, "myUniqueName", out bCreatedNew);GC.Collect();if (bCreatedNew)Application.Run(new Form1()); ...

之所以會有這樣的問題,是因為Mutex在Release模式下被GC給回收了,而Debug模式下因為便於開發人員除錯,據說有將GC的周期給拉長,所以不容易重現。那這樣的問題要怎麼樣解決呢?這邊筆者有整理了幾種方法。

?

一個方法就是把Mutex給拉出來成為類別成員。

... static Mutex m;/// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() {Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Boolean bCreatedNew;//Create a new mutex using specific mutex namem = new Mutex(false, "myUniqueName", out bCreatedNew);GC.Collect();if (bCreatedNew)Application.Run(new Form1()); } ...

另一個方法就是讓Mutex不要被GC回收掉,像是在程式最後明確呼叫Dispose,讓GC知道該Mutex仍在使用。

... Boolean bCreatedNew;//Create a new mutex using specific mutex name Mutex m = new Mutex(false, "myUniqueName", out bCreatedNew);GC.Collect();if (bCreatedNew)Application.Run(new Form1());m.Dispose(); ...

也可以用using或是try...finally之類的語法將Mutex給hold住。

... Boolean bCreatedNew;//Create a new mutex using specific mutex name using (Mutex m = new Mutex(false, "myUniqueName", out bCreatedNew)) {GC.Collect();if (bCreatedNew)Application.Run(new Form1()); } ...

或是把Mutex的用法寫的比較正規一點,加上WaitOne與ReleaseMutex去明確控制Mutex的作用範圍。

... Boolean bCreatedNew;//Create a new mutex using specific mutex name Mutex m = new Mutex(false, "myUniqueName", out bCreatedNew);m.WaitOne(); GC.Collect();if (bCreatedNew)Application.Run(new Form1());m.ReleaseMutex(); ...

?

轉載于:https://www.cnblogs.com/MLGB/p/4465901.html

總結

以上是生活随笔為你收集整理的使用Mutex實現單一程式執行個體的注意事項(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲精品国产精品乱码 | 91爱爱爱| 欧美激情不卡 | 国产午夜麻豆影院在线观看 | 国产综合视频在线观看 | 亚洲自拍成人 | 午夜影院在线看 | av收藏小四郎最新地址 | 亚洲丝袜一区 | 91网站免费入口 | 中文字幕日韩一级 | 香蕉大久久 | 久久夜色精品国产欧美乱极品 | 欧洲视频一区二区三区 | 欧美一区在线看 | 日韩毛片一区 | 免费级毛片| av大帝在线观看 | 国产 欧美 日韩 | 午夜特片网 | 99re6这里有精品热视频 | 另类激情亚洲 | 久久久不卡国产精品一区二区 | 日本亲与子乱ay中文 | 免费看成人啪啪 | 欧美日韩在线播放 | 亚洲欧美日韩精品永久在线 | 成人做爰www看视频软件 | 91免费小视频 | 黄色污污网站 | 91在线观看免费高清 | 99国产精品视频免费观看一公开 | 亚洲精品成人 | 欧美日韩一区二区区 | 性久久久久久久 | 男人看片网站 | 欧美成人黄 | 香蕉视频首页 | 国产福利久久久 | 日本中文一区 | 日本不卡免费 | 亚洲一区二区在线播放 | 精品无码三级在线观看视频 | 中文字幕有码在线 | 大陆极品少妇内射aaaaa | 青娱乐久久 | 中文精品久久久久人妻不卡 | 麻豆一区二区三区精品视频 | 91av综合| 欧洲一二三区 | 久久国产一级片 | 日韩有码第一页 | 欧美亚洲伦理 | 久久aⅴ乱码一区二区三区 亚洲成人18 | 国产欧美一区二区三区在线 | 亚洲 激情 小说 另类 欧美 | 国产少妇在线 | 男女av在线| 91精品亚洲一区 | 欧美色图自拍 | 久久久久久久伊人 | 成人福利在线观看 | 午夜一区在线观看 | 污动漫网站 | 99热97| 欧美亚州 | 欧美高清 | 亚洲成a人| 小俊大肉大捧一进一出好爽 | 亚洲成年网站 | 黑鬼大战白妞高潮喷白浆 | xxx毛片| 美女少妇毛片 | 国内精品人妻无码久久久影院蜜桃 | 日韩av在线免费播放 | 久久成人福利 | 中文字幕人妻色偷偷久久 | 亚洲影视一区二区 | www香蕉| 亚洲av人无码激艳猛片服务器 | 91精品国产亚洲 | 午夜精品久久久久久久久久 | 国产精品乱码久久久 | 亚洲五月六月 | 免费av不卡 | 久久久久国色av免费观看性色 | 姑娘第5集在线观看免费 | 哪里可以看毛片 | 国产一区二区三区四区精 | 欧美日韩人妻精品一区 | 狠狠干夜夜干 | 天堂av网址 | 麻豆极品 | 九九热精品视频在线观看 | 欧美精品一区二区三区三州 | 国产福利精品一区 | 成年人小视频 | 欧美日韩一区二区三区在线 | www.自拍偷拍 |