zoukankan      html  css  js  c++  java
  • Application类

     Application应用程序生命周期

    应用程序的关闭方式------可以在App.xaml文件中设置应用程序的状态,默认 Application.ShutdownMode = OnLastWindowClose

      注意的是:如果设置为OnMainWindowClose 当关闭主窗口时候,那么Application对象将在Run方法返回前自动关闭其他窗口,如果调用Application.Shutdown方法也会关闭其他窗口

    7.1.4 应用程序事件

      App.xaml.cs当中未包含任何代码,但是可以添加代码来处理一些应用程序事件

           StartUP():该事件在调用Application.Run()方法之后,并且在主窗口显示之前发生,可以通过此事件来检测应用程序参数,或是显示不同的窗口

           Exit():该事件在应用程序关闭时,并在Run()方法即将返回之前发生,这时不能取消关闭,

           SessionEnding(): 该事件在Windows对话结束时发生,当用户注销或关闭计算机时会触发,可以通过SessionEndingEventArgs.Canel属性设置为true来取消关闭,否则事件处理程序结束后将调用Application.Shutdown()方法

           Activated():应用程序第一个窗口被激活时,或者是从另一个windows程序切换到当前应用程序时触发此事件

           Deactivated():应用程序取消激活,或是从当前应用程序切换到其他应用时

           DispatcherUnhandleException():在应用程序内部(主应用程序线程)中的任何位置,发生未处理的异常,就会触发该事件,通过此事件可以记录异常发生的原因,如果应用程序仍然处于可以运行状态,可以设置

                            DispatcherUnhandleExceptionEventArgs.Handle属性为true来继续运行程序

    xaml中的代码
    <Application x:Class="WpfChapter7.App"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:local="clr-namespace:WpfChapter7"
                 StartupUri="MainWindow.xaml"  DispatcherUnhandledException="Application_DispatcherUnhandledException">
        <Application.Resources>
             
        </Application.Resources>
    </Application>
    
    文件中的代码
    private void Application_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
            {
                e.Handled = true; 
                MessageBox.Show("全局异常捕获" + e.ToString() + e.Exception.ToString());
            }

    7.2  Application的任务

     7.2.1 显示初始界面

        当应用程序初始化过程过长,或者加载的文件较多,避免用户在等待的过程中,多次点击运行程序,可以通过以下方式 设置一个简单的wpf启动界面,以下示例,线程休眠5秒来模拟程序加载

    protected override void OnStartup(StartupEventArgs e)
            {
    
                SplashScreen splashScreen = new SplashScreen("test.jpg");
                splashScreen.Show(true);
                Thread.Sleep(5000);
                base.OnStartup(e);  
            }

    7.2.2 访问当前Application对象

        在wpf应用程序中的任意地方,都可以通过Application.Current来获取当前应用程序对象,以及进行一些操作

          例如:获取主窗口  Window  MainWindow = Application.Current.MainWindow;

             获取当前程序所有引用的窗口集合   Application.Current.Windows;

    7.2.5 单实例应用程序

        对于单实例应用程序,wpf目前未提供解决方案,目前都是使用变通的方式来进行单例运行

          一:使用全局的mutex对象(由操作系统提供用于进程间通信的同步对象),简单有效,缺陷无法传递参数给已经运行的wpf实例。

         Mutex mutex; 
            protected override void OnStartup(StartupEventArgs e)
            {
                bool ret;
                mutex = new Mutex(true, "WpfChapter7", out ret);  //参数为应用程序集名称  
                if(!ret)
                {
                    MessageBox.Show("程序已运行,请不要重复运行");
                    App.Current.Shutdown(); 
                } 
            }

          二:使用系统枚举进程名称判断程序是否运行 

          三: 通过引用Microsoft.VisualBasic.dll程序集,并继承Microsoft.VisualBasicApplicationServices.WindowsFormApplicationBase类来实现单例运行,此方式可以向已运行的程序传递参数,例如,双击word文档打开word程序

    7.3 程序集资源

        程序集资源也被称为二进制资源,因为他们作为不透明的的二进制数据嵌已编译的后的程序集中

      7.3.1  添加资源

             直接将资源文件(图片,视频等)拷贝至工程目录下,将其“Build Action” 属性设置为Resource 默认也是这个属性

            使用资源 : xaml方式  < image source = "image/test.jpg" />

                  代码: Image.Source = new BitmapImage(new Uri("image/test.jpg",UriKind.Relative));

      WPF中的URI语法

        img.Source= new BitmapImage(new Uri("pack://application:,,,/image/test.jpg"));

        使用绝对URI时,可以使用指向程序集资源的文件路径,网络共享的UNC路径、web站点UrL,当应用程序获取不到该资源时,将产生异常,如果URI使用

  • 相关阅读:
    HBase原理和架构
    Hive UDF作业
    Hive性能调优
    hive
    Netty4.0学习笔记系列之一:Server与Client的通讯
    JAVA NIO 简介(转)
    设计模式之观察者模式(Observer Pattern)
    设计模式之装饰者模式(Decorator Pattern)
    mysql存储过程写法—动态参数运用
    hashCode() 和equals() 区别和作用
  • 原文地址:https://www.cnblogs.com/shenwenbo/p/9883297.html
Copyright © 2011-2022 走看看