在标准的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()
之前,会有任何功能不可用吗?
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)
,它将允许您在表单显示之前执行代码-这似乎是要走的路。
本页的示例代码在显示两个表单之前进行了一些初始化,因此您应该可以使用您的模型。