WPF Application性能讲解

开发 开发工具
WPF Application在WPF的实际使用中是非常重要的一个操作。我们可以通过WPF Application来带领全局的行为与操作向一个正确的方向进行。

WPF开发工具是由微软研发的一款UI领域的图形界面处理工具。可以帮助程序员们很方便的实现特殊的图形界面效果。Form 类似, WPF 同样需要一个 Application 来统领一些全局的行为和操作,并且每个 Domain 中只能有一个WPF Application实例存在。#t#

和 WinForm 不同的是WPF Application默认由两部分组成 : App.xaml 和 App.xaml.cs,这有点类似于 Delphi Form,将定义和行为代码相分离。当然,WebForm 也采用了类似的方式。XAML 从严格意义上说并不是一个纯粹的 XML 格式文件,它更像是一种 DSL,它的所有定义都直接映射成某些代码,只不过具体的翻译工作由编译器完成而已。

下面是一个简单的 App 定义。

 

  1. public partial class 
    App : Application  
  2. {  

当你在自动生成的 Project 代码中看到 paritial 时,应该下意识去找找 "This code was generated by a tool." …… 不过这次自动生成的代码存放位置更加古怪 —— objDebugApp.g.cs。

 

  1. public partial class App : 
    System.Windows.Application  
  2. {  
  3. [DebuggerNonUserCode]  
  4. public void Initialize
    Component()  
  5. {  
  6. this.StartupUri = new 
    System.Uri("Window1.xaml", 
    System.UriKind.Relative);  
  7. }  
  8. [STAThread]  
  9. [DebuggerNonUserCode]  
  10. public static void Main()  
  11. {  
  12. App app = new App();  
  13. app.InitializeComponent();  
  14. app.Run();  
  15. }  

 

App.StartupUri 用于设置 MainWindow,App.Run() 启动消息循环。当然,还有那个 STAThread,这意味着WPF Application依旧使用一个 UI Thread 来处理 UI Message。

我们完全可以舍弃自动生成的代码,自己手工写一个 App。

 

  1. public class App : Application  
  2. {  
  3. [STAThread]  
  4. private static void Main()  
  5. {  
  6. var app = new App();  
  7. var window = new Window 
    Title = "WPF" };  
  8. app.Run(window);  
  9. }  

 

WPF Application提供了一些实用的属性和方法。

Current: 获取 Domain 中默认的 Application 实例。

MainWindow: 获取主窗口实例。

Windows: 获取所有被实例化的 Window 实例。

ShutdownMode: 指定 Application.Shutdown 方式,包括主窗体关闭,最后一个窗口关闭,以及手工调用 Shutdown()。

Properties: 一个线程安全的全局字典,可用来存储一个公共信息。

Shutdown: 该方法终止 Application Process,可向操作系统返回一个退出码。

我们依然可以使用 Mutex 来阻止运行多个实例。

 

  1. private void Application_Startup
    (object sender, StartupEventArgs e)  
  2. {  
  3. var createdNew = false;  
  4. var name = Assembly.GetEntry
    Assembly().FullName;  
  5. new Mutex(true, name, out 
    createdNew);  
  6. if (!createdNew)  
  7. {  
  8. MessageBox.Show("There is 
    already an instance 
    running, Exit!");  
  9. Application.Current.Shutdown();  
  10. }  

当然也可以用 Windows 属性判断窗体是否已经存在。

 

  1. private void button1_Click
    (object sender, RoutedEventArgs e)  
  2. {  
  3. var window2 = Application.
    Current.Windows.OfType
    <Window>().FirstOrDefault
    (
    w => w is Window2);  
  4. if (window2 == null) 
    window2 = new Window2();  
  5. window2.Show();  
  6. window2.Activate();  

以上就是我们通过各种实例代码为大家解读的WPF Application相关概念。

责任编辑:曹凯 来源: 开发学院
相关推荐

2010-04-26 12:30:42

Unix Shell

2010-01-13 17:17:32

四层千兆接入交换机

2010-04-30 18:38:45

Unix系统

2009-12-25 17:39:01

WPF验证

2010-05-07 16:53:28

Unix format

2009-12-23 10:13:20

WPF体系架构

2023-05-11 08:59:43

Nginx配置服务器

2009-12-23 15:16:52

WPF数据绑定

2009-12-24 13:51:49

WPF文档打印

2010-02-07 14:16:57

2009-12-08 15:18:01

路由器功能

2009-12-28 11:09:25

WPF启动参数

2009-12-28 17:26:17

WPF可视化

2009-12-24 09:56:29

WPF图像API

2009-12-23 17:31:56

WPF Style

2009-12-23 17:07:37

WPF性能

2015-07-29 11:05:58

IE开发人员实用功能

2009-12-25 10:39:49

WPF应用程序关闭

2009-12-29 10:11:56

WPF布局属性

2009-12-24 16:46:03

WPF性能优化
点赞
收藏

51CTO技术栈公众号