C#建立單一實例應用程式

來源:互聯網
上載者:User

直接上代碼:

 

using System;<br />using System.Collections.Generic;<br />using System.Windows.Forms;<br />using Microsoft.VisualBasic.ApplicationServices;<br />using System.Collections.ObjectModel;</p><p>namespace ADODemo<br />{<br /> static class Program<br /> {<br /> /// <summary><br /> /// The main entry point for the application.<br /> /// </summary><br /> [STAThread]<br /> static void Main()<br /> {<br /> Application.EnableVisualStyles();<br /> Application.SetCompatibleTextRenderingDefault(false);<br /> //第一種單一實例運行方式:使用線程互斥體<br /> //bool isOnlyOne;<br /> //System.Threading.Mutex mtx = new System.Threading.Mutex(false, "OnlyOne", out isOnlyOne);<br /> //if (isOnlyOne)<br /> //{<br /> // Application.Run(new Form2());<br /> //}<br /> //else<br /> //{<br /> // MessageBox.Show("當前已經運行本應用程式了,無須再次運行");<br /> //}</p><p> //第二種單一實例運行方式:使用Process類來檢測是否已經存在本應用程式的進程(不推薦使用)<br /> //bool isOnlyOne=true;<br /> //foreach (System.Diagnostics.Process p in System.Diagnostics.Process.GetProcesses())<br /> //{<br /> // if (p.ProcessName == "ADODemo")<br /> // {<br /> // isOnlyOne = false;<br /> // }<br /> //}<br /> //if (isOnlyOne)<br /> //{<br /> // Application.Run(new Form2());<br /> //}<br /> //else<br /> //{<br /> // MessageBox.Show("當前已經運行本應用程式了,無須再次運行");<br /> //}</p><p> /*3:第三種單一實例運行方式:繼承WindowsFormsApplicationBase實現單一實例管理器<br /> *在 VS2008 的 MSDN 中,搜尋 "單一實例",找到了MS官方的實現方法。<br /> *頁面地址:單一實例檢測樣本 ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/wpf_samples/HTML/c283e8e9-6fb5-494f-9600-826148e77046.htm<br /> *來源程式下載。ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/wpf_samples/sampleexecutables/AppModel/SingleInstanceDetectionSample.zip<br /> * 需要添加對Microsoft.VisualBasic的庫引用<br /> * */<br /> SingleInstanceManager manager = new SingleInstanceManager();//單一實例管理器<br /> manager.Run(new string[] { });</p><p> }<br /> }</p><p> /// <summary><br /> /// Using VB bits to detect single instances and process accordingly:<br /> /// * OnStartup is fired when the first instance loads<br /> /// * OnStartupNextInstance is fired when the application is re-run again<br /> /// NOTE: it is redirected to this instance thanks to IsSingleInstance<br /> /// </summary><br /> public class SingleInstanceManager : WindowsFormsApplicationBase<br /> {<br /> Form2 app;</p><p> public SingleInstanceManager()<br /> {<br /> //單一實例設定,觸發NEXTINSTENCE事件<br /> this.IsSingleInstance = true;</p><p> //由於沒有用主表單,設定多視窗SDI應用程式,只有當所有表單關閉後才關閉程式<br /> this.ShutdownStyle = ShutdownMode.AfterAllFormsClose;<br /> }</p><p> protected override bool OnStartup(Microsoft.VisualBasic.ApplicationServices.StartupEventArgs eventArgs)<br /> {<br /> //在程式第一次運行時調用<br /> app = new Form2();<br /> Application.Run(app);<br /> //運行後返回FLASE<br /> return false;<br /> }</p><p> protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs)<br /> {<br /> base.OnStartupNextInstance(eventArgs);<br /> app.Activate();<br /> //提示已經運行<br /> MessageBox.Show(Application.ProductName + " 已經在運行了,不能重複運行。", "確定", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);<br /> }<br /> }<br />}<br />

 

 

第二種方式我試過,不建議使用,不信你就試試吧,只要你的VS運行中,進程就存在。。,

至於第一種,如果想實現可以自動彈出已經啟動並執行表單的效果,見如下連結:

1:ttp://blog.csdn.net/songkexin/archive/2010/09/12/5879200.aspx

2:http://blog.csdn.net/senophen/archive/2010/04/29/5543297.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.