WPF系列教程(二十):Application类的创建与应用

项目源码

应用程序的启动

Application类中是整个项目,创建一个单线程的主程序:

namespace ApplicationClass
{
    
    
    class StartUp
    {
    
    
        [STAThread()]  // 定义单线程
        static void Main() // 主程序
        {
    
    
            Application app = new Application();  // 创建一个程序
            MainWindow window = new MainWindow();  // 新建一个主窗体
            app.Run(window);  // 用Run方法启动该应用程序
        }
    }
}

这样就讲StartUp中的Main作为了主函数,程序从这里开始,新建一个应用程序,并实例化一个主窗口,使用Run方法启动该应用程序。
在项目-属性中将原来的APP.xaml文件作为启动项的启动对象改为我们新建的Application类。

在这里插入图片描述
运行该程序就可以启动主窗体了。
实际上,我们在新建一个一个wpf应用程序时,自动创建的APP.xaml文件就包含了这些内容。只要修改StartupUri="Window1.xaml"就可以修改启动程序。
应用程序的关闭
通常来说,只要有未关闭的窗口,应用程序就不会关闭。也可以通过调整APP.xaml中的ShutdownMode属性:
在这里插入图片描述
OnExplicitShutdown:应用程序永远不会关闭,即使没有窗体了
OnLastWindowClose:当所有窗体全关闭时,应用程序关闭,默认值
OnMainWindowClose:当主窗体关闭时,应用程序关闭

应用程序的事件属性

Application的事件属性并不多,但十分重要:
在这里插入图片描述
Startup事件:在调用Run之后,在主窗体显示之前发生的事件。
Exit事件:在应用程序关闭时发生。
SessionEnding:在Windows对话结束时发生,例如关闭计算机时。
Activated:当应用程序的一个窗体被激活时发生。
Deactivated:当一个应用程序窗体被取消激活时发生。
DispatcherUnhandledException:应用程序任何地方发生未处理的异常时发生。在使用时,可以调用事件处理程序处理事件。
例如:DispatcherUnhandledException="Application_DispatcherUnhandledException"
还有一种方法,在应用程序事件属性前面加上一个On,就代表该事件的对应响应函数,例如OnStartup和OnDispatcherUnhandledException等等。
例如:

protected override void OnSessionEnding(SessionEndingCancelEventArgs e)  // 重写保护函数
{
    
    
    base.OnSessionEnding(e);
    e.Cancel = true;  // 阻止系统关闭等,且阻止应用程序关闭
    MessageBox.Show("无法注销活关闭系统");
}

找到项目的bin文件夹中的exe文件,启动。
当让计算机关机或注销时,将不能执行,应用程序也不会结束。
在这里插入图片描述
也就是说,当发生e事件时,使用重写方法取消该事件。

Guess you like

Origin blog.csdn.net/qq_43511299/article/details/121604743