在标准的WinForms应用程序中调用application. run()之前,什么是不可用的?

本文关键字:什么 之前 应用程序 WinForms 标准 调用 run application | 更新日期: 2023-09-27 17:52:16

我想在我的WinForms应用程序运行时做一些初始化的各种东西。我特别关注Program.cs文件,每个WinForm应用程序都有。在里面,我看到:

[STAThread]
static void Main() {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new frmMain());
}

我知道这是启动应用程序并创建初始表单(在我的例子中,是frmMain的实例)的操作。

我可以不只是把我的初始化代码 Application.Run() ?我需要做的初始化是检查一些注册表项,必要时创建它们,并连接到数据库。如果我把实例化代码放在Application.Run()之前,会有任何功能不可用吗?

在标准的WinForms应用程序中调用application. run()之前,什么是不可用的?

Application.Run()为主线程启动消息循环。所以在这行代码之前,你可以做任何事情,除了依赖于windows消息(点击,keyup,…)

Windows窗体应用程序在调用Main方法时启动。您可以在Main函数上实现初始化过程。然而,要完全初始化Windows Forms应用程序并启动它路由Windows Forms事件,您需要调用Application.Run


阅读Application

是的,没有问题,Main()中的代码是样板,但不是一成不变的。

请记住,在调用Application.Run()之前运行的任何代码都会延迟用户界面的启动。一旦超过一两秒钟,你可能会考虑显示一个启动屏幕,这样用户就会得到一些视觉反馈,表明你的程序已经启动了。得到。net框架的良好支持,请查看此答案

Run之前没有一个重要的东西是有效的SynchronizationContext.Current。因此,如果您使用任何基于事件的异步模式组件,它们将看起来工作得很好,但将在线程池线程而不是GUI线程上触发事件。

因此,任何将完成事件排队到GUI的异步启动代码都应该从事件启动,而不是在Run之前。

只要您不需要访问在frmMain中声明的任何内容,应该是OK的。

但是MSDN显示:

开始在当前线程上运行标准应用程序消息循环。

所以你不能访问消息循环。

还有另一个重载Application.Run(ApplicationContext),它将允许您在表单显示之前执行代码-这似乎是要走的路。

本页的示例代码在显示两个表单之前进行了一些初始化,因此您应该可以使用您的模型。