繁体   English   中英

启动 WPF 应用程序时的 App_Startup() VS OnStartup()

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM