Ada*_*ane 5 c# windows .net-3.5 winforms
我希望我的C#.NET应用程序有一个表单,但不是一个表单.
当我正常启动一个Windows窗体应用程序时,就像该窗体是其他所有内容的主人:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
Run Code Online (Sandbox Code Playgroud)
相反,我想启动我的程序,然后能够显示一个表单,但不是表单本身.换句话说,我不希望应用程序的主控制器是形式,我希望它是一个非可视逻辑容器,它具有显示表单的能力,但不是表单本身.
我不确定我是否以明确的方式提出问题,但我想听听他们的想法.
您可以使用ApplicationContext.这将为您提供必要的消息循环,一旦您决定创建一个表单,它将使表单保持活动状态.使您的Program类看起来类似于:
static class Program {
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
AppContext = new ApplicationContext();
Application.Run(AppContext);
}
public static void Quit() {
AppContext.ExitThread();
}
public static ApplicationContext AppContext;
}
Run Code Online (Sandbox Code Playgroud)
请注意,关闭最后一个窗口时,应用程序不会自动关闭.需要显式调用ExitThread.
创建一个单独的 Bootstrapper 组件是相当常见的,您可以将主窗体的显示移动到:
using System;
using System.Windows.Forms;
namespace Example
{
internal static class Program
{
[STAThread]
private static void Main()
{
new Bootstrapper().Run();
}
}
public class Bootstrapper
{
public void Run()
{
// [Application initialization here]
ShowView();
}
private static void ShowView()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
Run Code Online (Sandbox Code Playgroud)