[C#] Winform 同一支App裡面不同的視窗有不同的Process (1)
2017-06-14
最近碰到一個專案,有一個需求,就是在Form 裡面,我設定為 IsMdiContainer 為 true ,裡面當然就是放一些MdiWindow ,這邊就不贅述,但是目的就是要達到每一個打開的視窗都是獨立的 Process 而且當掉了不會取影響到其他的視窗,這時候就麻煩了,到底要怎麼做到打開的視窗不去影響到其他的視窗,當然解決方法我相信還有其他的方法,這邊就先不討論,這案例做完大概會長得像是這樣:
我程式名稱為 MutiProcessWindows 然後因為我裡面開了兩個子視窗,所以總共會有3個Process。
1. 同一支 exe 不同啟動的視窗
我這專案有三個form
預設是啟動 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
接下來就是要寫一個中介的東西(容器)這邊我取名叫做 ProcessAgent 來中間去啟動FormA , FormB 並且放入在Form1 內