Wpf Application类的任务:

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Wpf Application类的任务:相关的知识,希望对你有一定的参考价值。

首先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类的任务:的主要内容,如果未能解决你的问题,请参考以下文章

WPF——Application

博客园WPF Application类

WPF学习第二十六章 Application类——应用程序的生命周期

从控制台应用程序启动 WPF 窗口

WPF 等效于 Application.AddMessageFilter(Windows 窗体)

WPF等效于Application.AddMessageFilter(Windows窗体)