Wpf Application類的任務:
阿新 • • 發佈:2017-08-24
rtu 操作 strong start end 命名 esp title exc 首先Application能夠實現幾種功能,比如訪問命令行參數,獲取當前程序類的實例,以及常見的單窗口程序實例.
訪問命令行參數:
第一種: 獲取獲取方式使用Environment.GetCommandLineArgs();
第二種: 響應 Application 類的 OnStartup() 事件.
Example:
屬性訪問 Application 類的實例.
Application 對象提供了幾個相當有用的屬性:
MainWindow 開發人員可以訪問這個屬性來獲取應用程序的主窗口.
Windows 集合屬性用於獲取當前打開的引用程序窗口的集合.
Properties 屬性可以訪問和設置應用程序的設置,
Resources 屬性可以訪問和設置應用程序的資源.
單例應用程序(1)
/// <summary> /// 通過類屬性=>調試=>命令行參數執行相應的動作 /// </summary> /// <param name="sender"></param>/// <param name="e"></param> private void Application_Startup(object sender, StartupEventArgs e) { bool startMinmized = false; for (int i = 0; i < e.Args.Length; i++) { if (e.Args[i] == "/StartMinmized") startMinmized= true; } MainWindow win = new MainWindow(); if (startMinmized) { win.WindowState = WindowState.Minimized; win.Content = "當前命令參數為:" + e.Args[0]; } win.Show(); }
獲取當前程序實例: Application.Current
/// <summary> /// App.xaml 的交互邏輯 /// </summary> public partial class App : Application { /// <summary> /// Mutex 在System.Threading命名空間中,成為同步基元,或者成為互斥元. /// 當創建一個引用程序類時,將同時創建一個系統範圍內的命名的Mutex對象. /// 這個互斥單元在整個操作系統中都是可見的. /// </summary> Mutex mutex; protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); string mutexName = "SingleInstanceApplication"; bool CreatedNew; //判斷是否已經創建相同實例名稱的應用程序 mutex = new Mutex(true, mutexName, out CreatedNew); if (!CreatedNew) { MessageBox.Show("已經存在一個引用程序勢力"); Shutdown(); } } }單例應用程序(2) 創建類似於Excel程序單個進程多個窗體程序. //程序入口
namespace SingleInstanceWithCommunication { public class Startup { [STAThread] public static void Main(string[] args) { SingleApplicationBase sab = new SingleApplicationBase(); sab.Run(args); } } }//單例程序基礎類,並且承 FIRST ADD DLL:Microsoft.VisualBasic; using Microsoft.VisualBasic.ApplicationServices
namespace SingleInstanceWithCommunicationhCommunication { public class SingleApplicationBase : WindowsFormsApplicationBase { public SingleApplicationBase() { //設置應用程序為單例程序 this.IsSingleInstance = true; } //SingleInstanceWithCommunication.App App wpfApp; protected override bool OnStartup(StartupEventArgs eventArgs) { wpfApp = new App(); wpfApp.Run(); return false; } protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs) { //當前程序開啟後,繼續開啟新程序會觸發OnStartupNextInstance事件,程序作出相應動作. //可以獲取當前參數在已開啟的程序中操作相應動作. base.OnStartupNextInstance(eventArgs); if (eventArgs.CommandLine.Count > 0) wpfApp.ShowWindowText(eventArgs.CommandLine[0]); } } }//關於APP變量的相關代碼
namespace SingleInstanceWithCommunication { /// <summary> /// App.xaml 的交互邏輯 /// </summary> public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); MainWindow win = new SingleInstanceWithCommunication.MainWindow(); this.MainWindow = win; win.Show(); if (e.Args.Length > 0) ShowWindowText(e.Args[0]); } public void ShowWindowText(string fileName) { Window1 win = new Window1(); win.Title = fileName; ((MainWindow)this.MainWindow).lstBox.Items.Add(fileName); win.Owner = this.MainWindow; win.LoadFile(fileName); win.Show(); } } }
Wpf Application類的任務: