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:
Mutex mutex=null;//防止Exe多开
protected override void OnStartup(StartupEventArgs e)
{
Application.Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;
this.DispatcherUnhandledException += new System.Windows.Threading.DispatcherUnhandledExceptionEventHandler(App_DispatcherUnhandledException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
//取程序所在目录
string AppPath = AppDomain.CurrentDomain.BaseDirectory;
Login2 loginWinT3 = new Login2();
bool? loginResult = loginWinT3.ShowDialog(); if ((loginResult.HasValue == true) && (loginResult.Value == true))
{
//base.OnStartup(e);
//Application.Current.ShutdownMode = ShutdownMode.OnMainWindowClose;
bool createdNew = false;
mutex = new Mutex(true, "WPFSTART", out createdNew);
if (!createdNew)
{
MessageBox.Show("程序已经启动!", "", MessageBoxButton.OK, MessageBoxImage.Warning);
this.Shutdown();
}
}
else
{
this.Shutdown();
}
}
仔细品味这段代码,你会发现,真的很不错;
1、想到防止多开Exe的处理方法;
2、想到Showdialog(),弹出窗体的处理页面数据交互;
3、想到应用程序域和应用程序载体(Application)未处理的异常的处理情况;
4、考虑到重写Application的OnStartUp的方法,处理其中的业务逻辑,真是不错的代码;
WPF入口Application的更多相关文章
- [转]WPF入口Application
1.WPF和 传统的WinForm 类似, WPF 同样需要一个 Application 来统领一些全局的行为和操作,并且每个 Domain (应用程序域)中只能有一个 Application 实例存 ...
- WPF基础——Application
一.Application介绍 WPF中的Application对象用来进行一些全局的行为和操作,并且每个 Domain (应用程序域)中仅且只有一个 Application 实例存在.WPF App ...
- WPF的Application类
本节主要介绍一下Application类的部分功能,我们首先来看一下如何使用Application类来加载一个窗口: 我们首先创建一个控制台程序,并引入相关的dll,然后修改Main()方法. [ST ...
- WPF之application对象
WPF:Application简介 Application是一个地址空间,在WPF中应用程序就是在System.Windows命名空间下的一个Application实例.一个应用程序只能对应一个App ...
- 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. ...
- 使用IE9、FireFox与Chrome浏览WPF Browser Application(.XBAP)的方式
最近开始写一些WPF的小Sample和文章,但是毕竟WPF应用程式不像Silverlight那么方便的只要装个Plugin就可以透过浏览器来看执行结果,因此把脑筋动到了改用WPF Browser Ap ...
- WPF 的 Application.Current.Dispatcher 中,为什么 Current 可能为 null
原文:WPF 的 Application.Current.Dispatcher 中,为什么 Current 可能为 null 在 WPF 程序中,可能会存在 Application.Current.D ...
- WPF 的 Application.Current.Dispatcher 中,Dispatcher 属性一定不会为 null
原文:WPF 的 Application.Current.Dispatcher 中,Dispatcher 属性一定不会为 null 在 WPF 程序中,可能会存在 Application.Curren ...
- Walkthrough: My first WPF desktop application
Walkthrough: My first WPF desktop application This article shows you how to develop a Windows Presen ...
随机推荐
- win2008r2激活码
我这有三个 以前用过可以 现在不知道能不能用 你试试BBFP3-49FVF-TJB8F-V26V6-DJPX9 CXTFT-74V4Y-9D48T-2DMFW-TX7CYGYF3T-H2V88-GRP ...
- WPF 数据绑定基础
纯理论,可能会枯燥. .net 技术群: 199281001 ,欢迎加入. 1.目标对象一定是派生自DependencyObject的对象,并且目标属性必须是依赖属性,否则数据绑定操作将会失 败. ...
- PHP雪花背景验证码
ValidateCode.class.php 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ...
- 向github提交代码
Quick setup — if you've done this kind of thing before https://github.com/KoMiles/emlog.git Create a ...
- 10.23lamp环境
前序: 查考文章:http://www.cnblogs.com/mchina/archive/2012/11/28/2778779.html http://www.centos.bz/2011/09/ ...
- 关于showModalDialog()对话框点击按钮弹出新页面的问题
页面a.aspx上,单击按钮a,走脚本,弹出showModalDialog("b.aspx",....) 在b.aspx上有个服务器控件按钮b,单击按钮,更新数据后,会弹出一个新的 ...
- Linux文件权限管理(持续更新)
文章是从我的个人博客上粘贴过来的, 大家也可以访问我的主页 www.iwangzheng.com 以root身份登录linux以后, ls -al 可以看到 -rw-rw-r-- 1 wangzhe ...
- DataSnap 用TStream 传递大数据 返回流大小为-1的情况
DataSnap可以直接传递和返回TStream类型的参数,这点是很方便的.但是很多人发现好像大小稍微大点就工作不正常了,就变相使用其它类型转换来转换去,这样便利性就失去了. 官方有篇博客很详细的介绍 ...
- ubuntu硬盘安装卡在探测文件系统
在硬盘安装ubuntu的时候,会出现这样的问题:安装程序一直卡在正在探测文件系统就不动了.解决的方法很简单.在安装之前要在终端输入sudo空格umount空格 -l空格 /isodevice 不能少一 ...
- Linux Apache prefork和worker的原理详解
prefork(多进程,每个进程产生子进程)和worker(多进程,每个进程生成多个线程) prefork的工作原理是,控制进程在最初建立“StartServers”个子进程后,为了满足MinS ...