C#Application.Run没有表格

时间:2011-01-18 08:36:36

标签: c# .net compact-framework

是否可以调用Application.Run,​​但是不传递表单参数,或者如果没有表单可以调用,是否有其他选择?

Run方法似乎没有任何不接受表单的重载。

例如,如果我想首先实例化一个类,然后调用该表单,那么是否有相应的方法:

Application.Run(myClass);

为了澄清,我仍然想要.Run()提供的功能。也就是说,建立一个循环来保持应用程序的运行,但不是跟踪表单,而是跟踪一个类或其他对象。

这最初与紧凑框架有关。我认为这就是为什么Run方法没有我正在寻找的重载。

4 个答案:

答案 0 :(得分:14)

  

Run方法似乎没有任何不接受表单的重载。

呃...... http://msdn.microsoft.com/en-us/library/ms157900.aspx

  

Application.Run方法

     

开始在当前线程上运行标准的应用程序消息循环,没有表单。

     

public static void Run()

答案 1 :(得分:7)

我不清楚你是否愿意这样做:

  1. 您希望将表单加载到Main()
  2. 以外的其他位置
  3. 或使用 用户界面运行控制台或服务应用程序。
  4. (1)

    static void main()
    {
        //Your program starts running here<<<
    
        //Do some stuff...
        FormRunner a = new FormRunner();
        a.RunForm();
    
    } // << And ends here
    
    class FormRunner {
    
        public void RunForm() {
            Application.Run(new Form());
        }
    
        //You could call which ever form you want from here?
    } // << And ends here
    

    您需要知道的是,您的程序从main的第一行开始,到最后一行结束。 然而,当您致电Application.Run(FORM)时,它会为该表单加载windows message loop。它是一个特殊的循环,可以使程序保持在主程序中并等待事件(它们在win32 API中称为Windows消息)

    因此,在用户单击关闭按钮之前,程序不会结束。当这种情况发生时,那就是当你的程序实际上从{Main} return {。}}时

    (2)现在,如果您只想要一个没有表单的纯控制台应用程序:

    static void main()
    {
        AcceptInputs()
        DrawScreen()
    
        //Do something else.
        //Make sure your flow stays within the main
    
    } // << Once you come here you're done.
    
    void AcceptInputs()
    {
        while(true) {
    
            //Keep accepting input
            break; // Call break when you're done. You'll be back in the main
        }
    }
    

    我希望有所帮助。

答案 2 :(得分:3)

您可以使用接受应用程序上下文作为唯一参数的Application.Run重载。 ApplicationContext基本上只是一个可以继承的类,并添加您喜欢的任何功能。有关详细信息,请参阅链接中的示例。

答案 3 :(得分:2)

using System;
using System.Windows.Forms;

static class Program
   [STAThread]
   static void Main() {
      Application.Run(new myClass());
   }

   internal class myClass : ApplicationContext {
      public myClass() {
         Application.Run(new myWindow());
      }
   }
}

这里的问题是,某些东西必须调用myClass的这个实例并告诉它退出,否则程序将在所有表单关闭后继续运行。并忽略在构造函数中调用ExitThread()。