首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WPF 學習筆記:Application 應用程式類別 — 生命週期、單例模式與全域資源管理

     編輯:關於.NET

Application 核心角色

WPF 應用程式每個 AppDomain 僅能存在單一 Application 實例。預設由 App.xaml (聲明) + App.xaml.cs (行為) 組成,類似 Delphi/WebForm 的定義與程式碼分離模式。

最小實作

public partial class App : Application { }

自動產生的程式碼 (obj\Debug\App.g.cs)

public partial class App : System.Windows.Application
{
    [DebuggerNonUserCode]
    public void InitializeComponent()
    {
        this.StartupUri = new System.Uri("Window1.xaml", System.UriKind.Relative);
    }

    [STAThread]
    [DebuggerNonUserCode]
    public static void Main()
    {
        App app = new App();
        app.InitializeComponent();
        app.Run();
    }
}
  • StartupUri:指定啟動視窗
  • Run():啟動訊息迴圈 (委派 Dispatcher.Run())
  • STAThread:WPF 仍使用單一 UI 執行緒 (STA 模式)

完全手寫 Application (無 XAML)

public class App : Application
{
    [STAThread]
    private static void Main()
    {
        var app = new App();
        var window = new Window { Title = "WPF" };
        app.Run(window);
    }
}

實用屬性與方法

成員用途
Current取得目前 AppDomain 的 Application 實例
MainWindow取得主視窗實例
Windows取得所有已具現化的 Window 集合
ShutdownMode關閉模式:主視窗關閉 / 最後視窗關閉 / 手動 Shutdown()
Properties執行緒安全的全域字典,跨視窗共享資料
Shutdown(exitCode)終止應用程式,可傳回碼給作業系統

單一實例應用程式實作

使用 Mutex (跨進程)

private void Application_Startup(object sender, StartupEventArgs e)
{
    var createdNew = false;
    var name = Assembly.GetEntryAssembly().FullName;
    new Mutex(true, name, out createdNew);

    if (!createdNew)
    {
        MessageBox.Show("已有實例執行中,結束!");
        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();
}

Application 事件生命週期

  • Startup:應用程式啟動 (初始化資源、單例檢查)
  • Exit:應用程式關閉 (釋放資源、儲存設定)
  • SessionEnding:Windows 登出/關機
  • DispatcherUnhandledException:UI 執行緒未處理例外
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved