在新建WinForm项目后,在Program.cs下会自动生成Main函数:
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }其中Run函数是Application类的非静态成员函数,而Application也不是对象而只是类型。
那么Application.Run会如此调用,该如何解释呢?
请大家帮忙看看,我实在想不出来。

解决方案 »

  1.   

            //
            // 摘要:
            //     在没有窗体的情况下,在当前线程上开始运行标准应用程序消息循环。
            public static void Run();
            //
            // 摘要:
            //     在特定的 System.Windows.Forms.ApplicationContext 中,在当前线程上开始运行标准应用程序消息循环。
            //
            // 参数:
            //   context:
            //     一个 System.Windows.Forms.ApplicationContext,应用程序将在其中运行。
            public static void Run(ApplicationContext context);
            //
            // 摘要:
            //     在当前线程上开始运行标准应用程序消息循环,并使指定窗体可见。
            //
            // 参数:
            //   mainForm:
            //     一个 System.Windows.Forms.Form,它代表要使之可见的窗体。
            public static void Run(Form mainForm);你转到定义处看看
      

  2.   

    在基于 Win32 的应用程序或 Windows 窗体应用程序中,消息循环是代码中处理用户事件(如鼠标单击和键盘键击)的一个例程。在每次运行基于 Windows 的应用程序时,都需要一个称为主消息循环的活动的消息循环。主消息循环关闭后,应用程序将退出。在 Windows 窗体中,当调用 Exit 方法,或对运行主消息循环的线程调用 ExitThread 方法时将关闭此循环。大多数 Windows 窗体开发人员不需要使用此版本的方法。您应使用 Run(Form) 重载来启动带有主窗体的应用程序,以便当窗体关闭时终止应用程序。
      

  3.   

     Application.Run(new Form1()); 等同于下面的代码
    Form1 frm=new Form1();
    frm.ShowDialog();
    frm.Dispose();
    frm=null;
      

  4.   

    需要结合 win32 sdk 知识来学习体会.windows 程序是消息驱动的, 各种消息来源复杂, 需要一个消息分发器, 也叫消息泵, 
    通常只有一个, 存在玉界面线程中, 叽里咕噜
      

  5.   

    可以看看一个 c# 写的 win32 程序的本来面目: 一个简单的 C# 语言编写的 WIN32 程序
      

  6.   


    //Run函数定义
    public static void Run(Form mainForm);明显是静态的么,一般的类的静态函数也是这么用的啊。
      

  7.   


    public class Test
    {
     public static int GetZero()
     {
       return 0;
     }
    }
    static void Main()
    {
      int xx = Test.GetZero();
    }
      

  8.   

    你的推理是正确的,非静态成员确实只能用对象而非类型调用问题在于:Run方法是静态方法,而不是你说的非静态汗........
      

  9.   

    Application.Run 方法 (ApplicationContext)
    在特定的 ApplicationContext 中,在当前线程上开始运行标准应用程序消息循环。Application.Run直到主窗口关闭才退出,所以new的临时变量可以一直不被回收。 
      

  10.   

    Run是静态类,不需要实例也能调用
      

  11.   

    LZ看花了,RUN是静态的,当然就直接调用了............记得给分哦
      

  12.   

    public static void Run (
        Form mainForm
    )静态方法,对象直接调用。执行后,程序进入消息循环,run才是一个程序生命周期的开始  
      

  13.   

    是的,RUN是靜態的,不用實例化就可以直接調用的。
      

  14.   

    Sorry 各位热心网友。我不得不承认我浪费了大家的感情。
    因为,我发现原来是我看的MSDN版本有点问题,在MSDN2008版中,Application的Run成员函数是非静态的,所以使得我闹出了这个笑话,而在MSDN2005版中,Application的Run成员函数确实是静态的。直接调用Application.Run是可行的。
    下次,我一定不再犯这种低级错误。我在此向各位回复的热心网友做检讨。
      

  15.   

    悲剧,不是你看的msdn版本问题,而是你没有选择正确的检索项