單一應用程式 + My 物件

  • 1446
  • 0
  • C#
  • 2014-08-22

手動設定 C# 的單一應用程式與 My 物件


◎單一應用程式

C# 中並沒有像 VB.NET 有「建立單一執行個體應用程式」的快速設定,來達到同一時間內,只允許程式執行一次。

因此需要自行在程式碼中來指定目前程式架構為單一執行個體應用程式。

 

編輯 Program.cs 檔案

原程式碼


        /// <summary>
        /// 應用程式的主要進入點。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

修改為

 


        /// <summary>
        /// 應用程式的主要進入點。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            try
            {
                SingleApplication thisApplication = new SingleApplication();
                thisApplication.Run(args);
            }
            catch
            {
            }
        }
    }

    /// <summary>
    /// 定義單一應用程式架構
    /// </summary>
    internal class SingleApplication : Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase
    {
        public SingleApplication()
        {
            this.IsSingleInstance = true;
            this.EnableVisualStyles = true;
            this.ShutdownStyle = Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses;
        }

        protected override void OnCreateMainForm()
        {
            this.MainForm = new MainForm();
        }
    }

 

 

this.IsSingleInstance 等同於 VB.NET 的建立單一執行個體應用程式
this.EnableVisualStyles 等同於 VB.NET 的啟用 XP 視覺化樣式
this.ShutdownStyle 等同於 VB.NET 的程式關閉模式 (啟動表單關閉時)

 

 

◎My 物件

使用過 VB.NET 的人都知道,My 物件是一個相當方便的功能,可以快速的存取電腦、使用者或是程式的相關資訊。

但在 C# 中,想要使用這樣方便的功能時,就必需要手工自行設定了。

 

首先加入參考 Microsoft.VisualBasic,再來編輯 Program.cs 檔案

匯入命名空間 Microsoft.VisualBasic.Devices 與 Microsoft.VisualBasic.ApplicationServices

新增以下程式碼


    /// <summary>
    /// 定義 My 物件
    /// </summary>
    public static class My
    {
        static private Computer __Computer = new Computer();
        static private WindowsFormsApplicationBase __Application = new WindowsFormsApplicationBase();
        static private User __User = new User();

        public static ServerComputer Computer
        {
            get
            {
                return __Computer;
            }
        }

        public static WindowsFormsApplicationBase Application
        {
            get
            {
                return __Application;
            }
        }

        public static User User
        {
            get
            {
                return __User;
            }
        }
    }

如此一來,就可以在 C# 中享受到和 VB.NET 一樣的 My 物件了。


程式是運氣與直覺堆砌而成的奇蹟。
若不具備這兩者,不可能以這樣的工時實現這樣的規格。
修改規格是對奇蹟吐槽的褻瀆行為。
而追加修改則是相信奇蹟還會重現的魯莽行動。