1. 程式人生 > >Wpf Application類的任務:

Wpf Application類的任務:

rtu 操作 strong start end 命名 esp title exc

首先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類的任務: