2010年5月14日 星期五

使用C#建立單一執行個體的應用程式。

各位有開發過VB.NET的朋友們都知道。若要在VB.NET裡建立單一執行個體的應用程式,只要在專案屬性裡打個小勾就可以了。
但是在C#中卻沒有這個選項。但是小弟在另外的文章中曾經說過-"C#或VB.NET沒有一種功能是其中一個可以,另一個作不到的"。
為了證明自已的話,只好再度啟程向google大神朝拜。




經過了漫長的google之後,得到片段的資訊拼揍出使用以下方法可以讓應用程式實現在單一執行個體。

在新建專案後都會有一個program.cs檔案。內容如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    static class Program
    {
        /// <summary>
        /// 應用程式的主要進入點。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}
關鍵是"WindowsFormsApplicationBase"這個類別。
將上面程式改寫如下。即可得單一執行個體的應用程式。




using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace SingelInstanceApplication
{
    static class Program
    {
        /// <summary>
        /// 應用程式的主要進入點。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            SingelApp myapp = new SingelApp();
            myapp.Run(args);
        }
    }

    internal class SingelApp : Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase
    {
        public SingelApp()
        {
            this.IsSingleInstance = true;
            this.EnableVisualStyles = true;
            this.ShutdownStyle = Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses;
        }

        protected override void OnCreateMainForm()
        {
            this.MainForm = new Form1();
        }
    }
}
當然,有些朋友會需要在系統執行時由CommandLine加入參數。這個方法再加強一下也是可以,但是此次重點仍是展示C#的單一執行個體應用程式。所以若有需要的朋友再發言,我再來處理。

沒有留言:

張貼留言