0
点赞
收藏
分享

微信扫一扫

3. WPF应用程序启动时StartUp事件和重写OnStartup方法有什么不同

追梦人的自留地 1天前 阅读 0
wpfc#

文章目录

一. 目标

二. 技能介绍

① OnStartup方法介绍
public partial class App : Application
    {
        public App()
        {
            // 通过这种方式,可以将调试信息打印到输出窗口,在这种WPF应用程序中进行调试的时候很方便.
            System.Diagnostics.Debug.WriteLine("App() 构造函数执行完毕");
        }
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            // 初始化数据库
            InitializeDatabase();
            // 初始化日志系统
            InitializeLogging();
            // 注册全局异常处理器
            DispatcherUnhandledException += GlobalUiExceptionHandler;
            System.Diagnostics.Debug.WriteLine("OnSatrtup() 方法执行完毕!");
        }

        private void GlobalUiExceptionHandler(object sender, DispatcherUnhandledExceptionEventArgs e)
        {
        }

        private void InitializeLogging()
        {
        }

        private void InitializeDatabase()
        {
        }
    }

构造函数和OnStartup()方法执行顺序
上面代码我学到了哪些技能:

② Startup事件介绍

Startup事件的使用方式1:XAML中声明事件,后台实现(常规方法)

<Application x:Class="OnStartUpTest.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:OnStartUpTest"
             Startup="Application_Startup" StartupUri="MainWindow.xaml">
    <Application.Resources />
</Application>

Startup事件使用方式2:后台直接在构造函数中绑定事件

        public App()
        {
            Startup += Application_Startup;
            // 通过这种方式,可以将调试信息打印到输出窗口,在这种WPF应用程序中进行调试的时候很方便.
            System.Diagnostics.Debug.WriteLine("App() 构造函数执行完毕");
        }

具体的后台代码如下:

namespace OnStartUpTest
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        public App()
        {
            Startup += Application_Startup;
            // 通过这种方式,可以将调试信息打印到输出窗口,在这种WPF应用程序中进行调试的时候很方便.
            System.Diagnostics.Debug.WriteLine("App() 构造函数执行完毕");
        }

        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            // 初始化数据库
            InitializeDatabase();
            // 初始化日志系统
            InitializeLogging();
            // 注册全局异常处理器
            DispatcherUnhandledException += GlobalUiExceptionHandler;
            System.Diagnostics.Debug.WriteLine("OnSatrtup() 方法执行完毕!");
        }

        private void GlobalUiExceptionHandler(object sender, DispatcherUnhandledExceptionEventArgs e)
        {
        }

        private void InitializeLogging()
        {
        }

        private void InitializeDatabase()
        {
        }

        private void Application_Startup(object sender, StartupEventArgs e)
        {
            // 加载配置数据
            LoadConfigurationData();
            System.Diagnostics.Debug.WriteLine("Startup 事件执行完毕!");
        }

        private void LoadConfigurationData()
        {
        }
    }
}

运行结果:
在这里插入图片描述

三. 结论

① 不同点1: 设计意图
② 不同点2: 执行时机

结论: 具体你想使用哪种方式来完成项目启动前的初始化,都是可以的,我一般喜欢使用事件的方式,比较简单,并且不需要重写父类方法

举报

相关推荐

0 条评论