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对象作为整个应用程序入口
            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的方法,处理其中的业务逻辑,真是不错的代码;

时间: 2024-10-11 10:47:22

WPF入口Application的相关文章

六,WPF的Application类

Application.ShutdownMode属性:通过,只要有一个窗口还没有关闭,Application类就保持应用程序处于有效状态,如果这不是所期望的行为,就可以调整该属性. 应用程序事件 Application提供了为数不多的几个非常有用的事件,如下图所示: 有两种选择用于处理事件:在XAML中使用事件特性的方式关联事件处理程序,或重写相应的受保护方法,当重写应用程序方法时,推荐首先调用基类的实现,通常,基类的实现只是引发相应的应用程序事件. 初始界面(SplashScreen) WPF

使用IE9、FireFox与Chrome浏览WPF Browser Application(.XBAP)的方式

最近开始写一些WPF的小Sample和文章,但是毕竟WPF应用程式不像Silverlight那么方便的只要装个Plugin就可以透过浏览器来看执行结果,因此把脑筋动到了改用WPF Browser Application上,虽然它是WPF,但是一样可以透过浏览器来执行,这样就可以一边看文章一边看范例. 首先,来看看IE9的设定方式: 在IE9预设的设定下,是没办法正常浏览XBAP的,得要更改一下设定才行,还没更改设定之前看到的画面可能会像下图: 还好要开始这个功能非常的简单,只要点选IE9功能表的

How to update WPF browser application manifest and xbap file with ‘mage.exe’

老外参考文章1 老外参考文章2 I created a WPF browser application MyApp then published it by ClickOnce in VS2008. Published folder like this: PublishedFolder\MyApp.xbap PublishedFolder\setup.exe PublishedFolder\Application Files\MyApp_0_0_0_1\ MyApp.xbap Published

【Flume】从入口Application来分析flume的source和sink是如何与channel交互的

大家在启动flume的时候,输入的命令就可以看出flume的启动入口了 [[email protected] apache-flume-1.5.2-bin]# sh bin/flume-ng agent -c conf -f conf/server.conf -n a1 Info: Sourcing environment configuration script /home/flume/apache-flume-1.5.2-bin/conf/flume-env.sh + exec /home/

WPF中Application.Current的使用

原文:WPF中Application.Current的使用 WPF程序对应一个Application对象,当前的Application对象可以通过Application.Current获取,通过获取到的Application对象,我们可以做以下的事情: Application.Current.FindResource("资源名");//获取程序中定义的资源 Application.Current.MainWindow;//获取程序中定义的主窗体 Application.Current.

Walkthrough: My first WPF desktop application

Walkthrough: My first WPF desktop application This article shows you how to develop a Windows Presentation Foundation (WPF) desktop application that includes the elements that are common to most WPF applications: Extensible Application Markup Languag

wpf(Application 如何创建一个事件,及其Application相关的属性)

1.如何关闭wpf程序.应用程序的关闭只有调用其shutdown方法才可以.shutdown有三种属性.OnLastWindowClose,OnMainWindowClose,OnExplicitShutdown 1)通过在App.xaml中直接设置.shutdown="OnExplicitShutdown": 2)第二种方式:删除App.xaml文件,自己创建一个App.cs类,在main方法中: (建立Application对象,建立win窗体对象略) app.shutdown=s

WPF入门教程系列二——Application介绍

原文:WPF入门教程系列二--Application介绍 一.Application介绍 WPF和WinForm 很相似, WPF与WinForm一样有一个 Application对象来进行一些全局的行为和操作,并且每个 Domain (应用程序域)中仅且只有一个 Application 实例存在.和 WinForm 不同的是WPF Application默认由两部分组成 : App.xaml 和 App.xaml.cs,这有点类似于 Asp.Net WebForm,将定义和行为代码相分离. 微

高质量的基于向量条形码产生机制 WPF Drawing API条形码控件

Barcode Professional for WPF条形码控件是一款轻量级的 .NET 程序集,为你的WPF程序生成高质量的基于矢量的条码,支持大多数流行的一维和二维条形码:Code 39, Code 128, GS1-128, GS1 DataBar (RSS-14),  EAN 13 & UPC, Postal (USPS, British Royal Mail, Australia Post, DHL, etc.), Data Matrix, QR Code, PDF 417, UPS