通过 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase 实现 WPF 单例启动

WPF 单例启动的例子,记一下。

参考 WPF Single Instance workaround

 

关键代码:

namespace 你的命名空间
{
    public class Startup
    {
        [STAThread]
        public static void Main(string[] args)
        {
            SingleInstanceApplicationWrapper wrapper = new SingleInstanceApplicationWrapper();
            wrapper.Run(args);
        }
    } 

    public class SingleInstanceApplicationWrapper :
        Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase
    {
        private App app; // 这才是真正的WPF Application 

        public SingleInstanceApplicationWrapper()
        {
            this.IsSingleInstance = true;
        } 

        // 第一次打开调这个方法
        protected override bool OnStartup(
            Microsoft.VisualBasic.ApplicationServices.StartupEventArgs e)
        {
            app = new App();
            app.Run(); 

            return false;
        } 

        // 再次打开调这个方法
        protected override void OnStartupNextInstance(
            Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs e)
        {
            // 当用户试图再次打开这个程序的时候
            MessageBox.Show("您正在运行该程序");
        }
    } 

    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
    }
}

 OnStartupNextInstance 的方法中,可以获取第一个实例的主窗体,进行参数传递。

 

posted @ 2012-07-02 11:30  xiaokang088  阅读(1760)  评论(0编辑  收藏  举报