[C#] Winform 同一支App裡面不同的視窗有不同的Process (1)

2017-06-14

最近碰到一個專案,有一個需求,就是在Form 裡面,我設定為 IsMdiContainer 為 true ,裡面當然就是放一些MdiWindow ,這邊就不贅述,但是目的就是要達到每一個打開的視窗都是獨立的 Process 而且當掉了不會取影響到其他的視窗,這時候就麻煩了,到底要怎麼做到打開的視窗不去影響到其他的視窗,當然解決方法我相信還有其他的方法,這邊就先不討論,這案例做完大概會長得像是這樣:
Image 029
我程式名稱為 MutiProcessWindows 然後因為我裡面開了兩個子視窗,所以總共會有3個Process。

1. 同一支 exe 不同啟動的視窗
我這專案有三個form
image
預設是啟動 Form1 但是我需要讓他不同參數,就可以開啟不同的 form ,這點可以透過修改 Program.cs 做到 ,預設的是

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

這時候,我們需要再Main中加入 讓他可以讀取參數 所以修改成 static void Main(string[] args),之後我們加入可以帶入不同參數可以啟動不同的form 的程式碼:
        /// <summary>
        /// 應用程式的主要進入點。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new Form1());

            if (args.Length > 0)
            {

                switch (args[0])
                {
                    case "-forma":
                        {
                            Application.Run(new FormA());
                        }
                        break;
                    case "-formb":
                        {
                            Application.Run(new FormB()
                            {
                                StartPosition = FormStartPosition.CenterParent,
                              
                            });
                        }
                        break;

                }


            }
            else
            {
               Application.Run(new Form1());
               
            }
        }

這時候我們打開命令提示字元可以透過執行程式後面加入 –forma  ,  –formb 或是不下指令的方法分別啟動 FormA , FormB , Form1 當然你直接按下F5 執行他就是啟動Form1
image
接下來就是要寫一個中介的東西(容器)這邊我取名叫做 ProcessAgent 來中間去啟動FormA , FormB 並且放入在Form1 內


當麻許的超技八 2014 | Donma Hsu Design.