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 = ;
/*实例化Windows1*/
Windows1 = new Form();
Windows1.Text = "窗口1";
Windows1.Size = new System.Drawing.Size(, );
Windows1.Location = new System.Drawing.Point(, );
Windows1.Name = "Form1";
Windows1.FormClosed += OnMainFormClosed;//处理事件(窗口关闭的处理事件)
WindowsCount += ;//窗口总数加一 Windows2 = new Form();
Windows2.Text = "窗口2";
Windows2.Size = new System.Drawing.Size(, );
Windows2.Location = new System.Drawing.Point(, );
Windows2.Name = "Form2";
Windows2.FormClosed += OnMainFormClosed;//处理事件(窗口关闭的处理事件)
WindowsCount += ;//窗口总数加一 Windows3 = new Form();
Windows3.Text = "窗口3";
Windows3.Size = new System.Drawing.Size(, );
Windows3.Location = new System.Drawing.Point(, );
Windows3.Name = "Form3";
Windows3.FormClosed += OnMainFormClosed;//处理事件(窗口关闭的处理事件)
WindowsCount += ;//窗口总数加一 //显示3个窗口
Windows1.Show();
Windows2.Show();
Windows3.Show(); }
private void OnMainFormClosed(object sender,FormClosedEventArgs e)
{
WindowsCount -= ;
if (WindowsCount == )
ExitThread();//调用ExitThead终止消息循环 } }
namespace application1
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MyApplication());
}
}
}