zoukankan      html  css  js  c++  java
  • [转]WPF入口Application

    1、WPF和 传统的WinForm 类似, WPF 同样需要一个 Application 来统领一些全局的行为和操作,并且每个 Domain (应用程序域)中只能有一个 Application 实例存在。和 WinForm 不同的是 WPF Application 默认由两部分组成 : App.xaml 和 App.xaml.cs,将定义和行为代码相分离。当然,这个和WebForm 也比较类似。XAML 从严格意义上说并不是一个纯粹的 XML 格式文件,它更像是一种 DSL(Domain Specific Language,领域特定语言),它的所有定义都直接映射成某些代码,只是具体的翻译工作交给了编译器完成而已。WPF应用程序由 System.Windows.Application类来进行管理。

    入口文件的三种方式:

                Application app = new Application();
                // 方法一:调用Run方法,参数为启动的窗体对象 ,也是最常用的方法 
                  Window2 win = new Window2();
                app.Run(win);
    
                // 方法二:指定Application对象的MainWindow属性为启动窗体,然后调用无参数的Run方法  
                  Window2 win = new Window2();  
                app.MainWindow = win; 
                win.Show();       
                  app.Run();  
    
                方法三:通过Url的方式启动
                  app.StartupUri = new Uri("Window2.xaml", UriKind.Relative); 
                app.Run();
     

    也可在XAML中配置:StartupUri和ShutdownMode 来控制APP开启打开页面和关闭调用方法:

    <Application x:Class="WPFApplications.App"    xmlns="http://schemas.microsoft.com/winfx/2015/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2015/xaml"    StartupUri="Window2.xaml"    ShutdownMode="OnExplicitShutdown">    
    <Application.Resources>    </Application.Resources>
    </Application> 

     2、代码分析,重写OnStartUp:

     
     1 Mutex mutex=null;//防止Exe多开 
     2 protected override void OnStartup(StartupEventArgs e)
     3         {
     4             Application.Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;
     5             this.DispatcherUnhandledException += new System.Windows.Threading.DispatcherUnhandledExceptionEventHandler(App_DispatcherUnhandledException);
     6             AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
     7             //取程序所在目录
     8             string AppPath = AppDomain.CurrentDomain.BaseDirectory;
     9             Login2 loginWinT3 = new Login2();
    10             bool? loginResult = loginWinT3.ShowDialog();
    11 
    12             if ((loginResult.HasValue == true) && (loginResult.Value == true))
    13             {
    14                 //base.OnStartup(e);
    15                 //Application.Current.ShutdownMode = ShutdownMode.OnMainWindowClose;
    16                 bool createdNew = false;
    17                 mutex = new Mutex(true, "WPFSTART", out createdNew);
    18                 if (!createdNew)
    19                 {
    20                     MessageBox.Show("程序已经启动!", "", MessageBoxButton.OK, MessageBoxImage.Warning);
    21                     this.Shutdown();
    22                 }
    23             }
    24             else
    25             {
    26                 this.Shutdown();
    27             }
    28 }
     

    仔细品味这段代码,你会发现,真的很不错;

    1、想到防止多开Exe的处理方法;

    2、想到Showdialog(),弹出窗体的处理页面数据交互;

    3、想到应用程序域和应用程序载体(Application)未处理的异常的处理情况;

    4、考虑到重写Application的OnStartUp的方法,处理其中的业务逻辑,真是不错的代码;

  • 相关阅读:
    在Android模拟器(BlueStacks)中调试录音应用【20121221】
    一路来的脚印_停第二念【20130109】
    Office集锦_Word_禁止在粘帖内容前后添加空格【201318】
    Libgdx使用过程中在Android环境下遇到的各种错误提示的解决【2012112】
    童真趣语【20121217】
    【转】Android中的资源分析、读取【2012113】
    Office集锦_Word_禁止拼写检查【201318】
    BlueStacks中用户自己的SdCard的位置【2012116】
    Eclipse+BlueStacks调试Android应用_补充篇【20121030】
    The Power of H3D2 ! 截图,视频!
  • 原文地址:https://www.cnblogs.com/siyunianhua/p/10106498.html
Copyright © 2011-2022 走看看