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());
        }
    }
}

 

 

 

 

 

posted @ 2017-10-15 21:22  Dipsyhu  阅读(2566)  评论(0编辑  收藏  举报