创建单例winform应用程序

来源:互联网 发布:遗像制作软件 编辑:程序博客网 时间:2024/05/22 16:51
方法1:
using System;using System.Collections.Generic;using System.Linq;using System.Windows.Forms;using System.Threading;using System.Reflection;  static class Program    {        private static Mutex singleton;        /// <summary>        /// The main entry point for the application.        /// </summary>        [STAThread]        static void Main()        {            Application.EnableVisualStyles();            Application.SetCompatibleTextRenderingDefault(false);            bool   has=Check() ;            if (has)            {                Form form = new Form1();                form.FormClosed += new FormClosedEventHandler(form_FormClosed);                Application.Run(form);            }            else {                MessageBox.Show("程序已启动");                       }        }        static void form_FormClosed(object sender, FormClosedEventArgs e)        {            if (singleton != null) {                singleton.Close();            }        }        private static bool Check() {          bool   has=false;            singleton=new   Mutex(false,Assembly.GetExecutingAssembly().FullName,out has);         //   Assembly.GetExecutingAssembly().GetModules()[0].FullyQualifiedName;            return has;        }    }}

方法2:

    static class Program    {        /// <summary>        /// 应用程序的主入口点。        /// </summary>        [STAThread]        static void Main()        {            Process instance = RunningInstance();  //Get   the   running   instance.             if (instance == null)            {                //There   isn 't   another   instance,   show   our   form.                 Application.EnableVisualStyles();                Application.SetCompatibleTextRenderingDefault(false);                Application.Run(new MainForm());            }            else            {                Message.WriteErrMsg("程序已运行,请勿再次运行!");            }        }        public static Process RunningInstance()        {            Process current = Process.GetCurrentProcess();            Process[] processes = Process.GetProcessesByName(current.ProcessName);            //Loop   through   the   running   processes   in   with   the   same   name             foreach (Process process in processes)            {                //忽略当前进程                 if (process.Id != current.Id)                {                    //Make   sure   that   the   process   is   running   from   the   exe   file.                     if (Assembly.GetExecutingAssembly().Location.Replace("/ ", "\\ ") == current.MainModule.FileName)                    {                        //Return   the   other   process   instance.                         return process;                    }                }            }            //No   other   instance   was   found,   return   null.             return null;        }    }
方法1:不能避免多用户时的情况,多用户登陆系统时,还是可以开启多个实例的。

方法2:检查系统进程,可以解决多用户的问题,推荐方法2.



原创粉丝点击