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 定義。
- public partial class
App : Application - {
- }
當你在自動生成的 Project 代碼中看到 paritial 時,應該下意識去找找 "This code was generated by a tool." …… 不過這次自動生成的代碼存放位置更加古怪 —— objDebugApp.g.cs。
- public partial class App :
System.Windows.Application- {
- [DebuggerNonUserCode]
- public void Initialize
Component()- {
- this.StartupUri = new
System.Uri("Window1.xaml",
System.UriKind.Relative);- }
- [STAThread]
- [DebuggerNonUserCode]
- public static void Main()
- {
- App app = new App();
- app.InitializeComponent();
- app.Run();
- }
- }
App.StartupUri 用于設置 MainWindow,App.Run() 啟動消息循環。當然,還有那個 STAThread,這意味著WPF Application依舊使用一個 UI Thread 來處理 UI Message。
我們完全可以舍棄自動生成的代碼,自己手工寫一個 App。
- public class App : Application
- {
- [STAThread]
- private static void Main()
- {
- var app = new App();
- var window = new Window
{ Title = "WPF" };- app.Run(window);
- }
- }
WPF Application提供了一些實用的屬性和方法。
Current: 獲取 Domain 中默認的 Application 實例。
MainWindow: 獲取主窗口實例。
Windows: 獲取所有被實例化的 Window 實例。
ShutdownMode: 指定 Application.Shutdown 方式,包括主窗體關閉,最后一個窗口關閉,以及手工調用 Shutdown()。
Properties: 一個線程安全的全局字典,可用來存儲一個公共信息。
Shutdown: 該方法終止 Application Process,可向操作系統返回一個退出碼。
我們依然可以使用 Mutex 來阻止運行多個實例。
- private void Application_Startup
(object sender, StartupEventArgs e)- {
- var createdNew = false;
- var name = Assembly.GetEntry
Assembly().FullName;- new Mutex(true, name, out
createdNew);- if (!createdNew)
- {
- MessageBox.Show("There is
already an instance
running, Exit!");- Application.Current.Shutdown();
- }
- }
當然也可以用 Windows 屬性判斷窗體是否已經存在。
- private void button1_Click
(object sender, RoutedEventArgs e)- {
- var window2 = Application.
Current.Windows.OfType
<Window>().FirstOrDefault
(w => w is Window2);- if (window2 == null)
window2 = new Window2();- window2.Show();
- window2.Activate();
- }
以上就是我們通過各種實例代碼為大家解讀的WPF Application相關概念。