[英]App_Startup() VS OnStartup() when launching a WPF application
我正在启动一个新的 WPF 项目,我需要在启动应用程序时照明。
我观看了 2 个不同的 WPF 项目以了解如何开始。
App.xaml
文件中的void App_Startup(object sender, StartupEventArgs e)
方法开始,直接从App.xaml.cs
文件 ( Startup="App_Startup"
) 调用。App.xaml.cs
文件中的protected override void OnStartup(StartupEventArgs e)
方法开始。 除此之外,当我启动我的 WPF 项目时,默认代码模板以第三种方式开始,在App.xaml
文件中使用StartupUri="MainWindow.xaml"
。
这三种方式有什么区别?
Startup
是由Application
base class 的OnStartup
方法引发的事件,您可以在参考源中看到。 这是它的实现方式:
protected virtual void OnStartup(StartupEventArgs e)
{
VerifyAccess();
StartupEventHandler handler = (StartupEventHandler)Events[EVENT_STARTUP];
if (handler != null)
{
handler(this, e);
}
}
因此,如果您在App
class 中覆盖OnStartup
并调用base.OnStartup(e)
,将引发事件并调用任何附加的事件处理程序。 是在事件处理程序中实现逻辑还是直接在覆盖的OnStartup
中实现逻辑取决于个人或应用程序特定的偏好。 没有关于为什么一个应该比另一个更好的建议。
对于StartupUri
,仅当您只想在启动时立即显示默认 window 并且您没有任何自定义初始化逻辑时,才有意义。
在企业应用程序中,通常有某种引导程序来设置应用程序及其依赖项,并以编程方式而不是使用StartupUri
属性创建和显示主 window。
Startup="App_Startup"
只是您的应用程序的事件处理程序,它在App.xaml
中启动。 它具有您可以订阅的事件StartUp
。 如果你想有一些“预加载”逻辑,这是完美的地方。
如果您只想显示 window,指定 window 的 URI(在StartUpUri
中)就足够了,因此应用程序知道要加载哪个文件以及要显示什么 window:
OnStartup
从文档中引发应用程序启动事件(在base.OnStratUp
中):
OnStartup 引发 Startup 事件。
从 Application 派生的类型可能会覆盖 OnStartup。 如果需要引发 Startup 事件,则重写的方法必须在基础 class 中调用 OnStartup。
也可以放一些预加载逻辑。
没有推荐的方法,这取决于您和您的需要。
在这种情况下,一如既往。 这是在不同的架构模式中完成的同一件事。
该框架基本上为您提供了解决问题的不同方法。 只需采取最适合您的方法即可。 有时有选择,有时只有一种方式。
事实上,Framework 会调用覆盖的 Event 方法。 (因此 base.Xxx())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.