WPF Application性能讲解
创始人
2024-06-18 14:34:15
0

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
    ().FirstOrDefault
    (w => w is Window2);  
  4. if (window2 == null) 
    window2 = new Window2();  
  5. window2.Show();  
  6. window2.Activate();  

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

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...