是否可以调用Application.Run,但是不传递表单参数,或者如果没有表单可以调用,是否有其他选择?
Run方法似乎没有任何不接受表单的重载。
例如,如果我想首先实例化一个类,然后调用该表单,那么是否有相应的方法:
Application.Run(myClass);
为了澄清,我仍然想要.Run()提供的功能。也就是说,建立一个循环来保持应用程序的运行,但不是跟踪表单,而是跟踪一个类或其他对象。
这最初与紧凑框架有关。我认为这就是为什么Run方法没有我正在寻找的重载。
答案 0 :(得分:14)
Run方法似乎没有任何不接受表单的重载。
呃...... http://msdn.microsoft.com/en-us/library/ms157900.aspx
Application.Run方法
开始在当前线程上运行标准的应用程序消息循环,没有表单。
public static void Run()
答案 1 :(得分:7)
我不清楚你是否愿意这样做:
(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()。