c# Applicatcontext类
Application类(位于System.Windows.Forms命名空间)公开了Run方法,可以调用该方法来调度应用程序进入消息循环。Run方法有三个重载
1、第一个重载版本不带任何参数,比较少使用
2、static void Run(System.Windows.Forms.Form mainForm) 调用这个重载,只需要吧希望作为主窗口的Form实例(包括从Form类派生的类)
传递给mianForm参数即可。一旦mainForm关闭,整个消息循环就会退出,Run方法返回,应用程序就会退出。
3、static void Run(System.Windows.Forms.ApplicationContext context) 这是Run方法中重载最灵活的。通常的做法是从ApplicationContext类
派生,并写入实现代码。ApplicationContext类也允许设置一个Form实例制作为主窗口,也可以不设置主窗口。这个Run方法会在ApplicationContext
对象进行消息循环。调用ApplicationContext类的ExitThread方法会导致ApplicationContext上的消息循环终止。
手动创建一个类:产生三个窗口,只有把三个窗口全部关闭程序才终止运行(基于第三种Run方法)
using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; //从ApplicationContext派生一个类出来, public class MyApplication : ApplicationContext { static int WindowsCount;//用于记录窗口个数 private Form Windows1, Windows2, Windows3;//申请三个Form窗口 private只限于本类成员访问 //构造函数,分别实例化三个窗口 public MyApplication() { WindowsCount = 0; /*实例化Windows1*/ Windows1 = new Form(); Windows1.Text = "窗口1"; Windows1.Size = new System.Drawing.Size(300, 300); Windows1.Location = new System.Drawing.Point(50, 100); Windows1.Name = "Form1"; Windows1.FormClosed += OnMainFormClosed;//处理事件(窗口关闭的处理事件) WindowsCount += 1;//窗口总数加一 Windows2 = new Form(); Windows2.Text = "窗口2"; Windows2.Size = new System.Drawing.Size(300, 300); Windows2.Location = new System.Drawing.Point(50, 100); Windows2.Name = "Form2"; Windows2.FormClosed += OnMainFormClosed;//处理事件(窗口关闭的处理事件) WindowsCount += 1;//窗口总数加一 Windows3 = new Form(); Windows3.Text = "窗口3"; Windows3.Size = new System.Drawing.Size(300, 300); Windows3.Location = new System.Drawing.Point(50, 100); Windows3.Name = "Form3"; Windows3.FormClosed += OnMainFormClosed;//处理事件(窗口关闭的处理事件) WindowsCount += 1;//窗口总数加一 //显示3个窗口 Windows1.Show(); Windows2.Show(); Windows3.Show(); } private void OnMainFormClosed(object sender,FormClosedEventArgs e) { WindowsCount -= 1; if (WindowsCount == 0) ExitThread();//调用ExitThead终止消息循环 } } namespace application1 { static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MyApplication()); } } }