標籤:down shu 任務 summary 程式 es2017 param sources 互動
首先Application能夠實現幾種功能,比如訪問命令列參數,擷取當前程式類的執行個體,以及常見的單視窗程序執行個體.
訪問命令列參數:第一種: 擷取擷取方式使用Environment.GetCommandLineArgs();第二種: 響應 Application 類的 OnStartup() 事件. Example:
/// <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 屬性訪問 Application 類的執行個體.Application 對象提供了幾個相當有用的屬性:MainWindow 開發人員可以訪問這個屬性來擷取應用程式的主視窗.Windows 集合屬性用於擷取當前開啟的引用程式視窗的集合.Properties 屬性可以訪問和設定應用程式的設定,Resources 屬性可以訪問和設定應用程式的資源.
單例應用程式(1)
/// <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類的任務: