C#限制程序启动一个

2024-08-19  本文已影响0人  小羊爱学习

WinForm

WinForm下我们用互斥锁来解决

    internal static class Program
    {
        // 互斥锁名字
        private const string UniqueMutexName = "YuZhi.winformlearnmanager.Mutex";
        // 全局的互斥锁变量  
        private static Mutex mutex;
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]

        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            // 尝试获取互斥锁  
            mutex = new Mutex(true, UniqueMutexName, out bool createdNew);
            // 如果互斥锁已经存在(即另一个实例在运行)  
            if (!createdNew)
            {
                Application.Exit();
                return;
            }

            // 互斥锁是新创建的(即没有其他实例在运行),继续执行程序  
            Application.Run(new FrmLidarSetting());

            // 确保在应用程序退出时释放互斥锁  
            mutex.ReleaseMutex();
            mutex.Close();
        }
    }

使用using方式

internal static class Program
{
    // 互斥锁名字
    private const string UniqueMutexName = "JSC.jsclearn.Mutex";
    /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main()
    {
        using (var mutex = new Mutex(true, UniqueMutexName, out bool createdNew))
        {
            if (createdNew)
            {
                // 运行应用程序
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                // 释放互斥锁
                mutex.ReleaseMutex();
                mutex.Close();
            }
            else
            {
                // 已经有一个实例在运行,不启动第二个实例
                MessageBox.Show("应用程序已经在运行。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                Application.Exit(); // 退出当前实例
            }
        }
    }
}

WPF

WPF中更简单了

        private void Application_Startup(object sender, StartupEventArgs e)
        {
            Process[] p = Process.GetProcessesByName("CAATS_Client");
            if (p.Length > 1)
            {
                Application.Current.Shutdown();
                return;
            }
            HomeWin win = new HomeWin();
            // Show the window  
            win.Show();
        }
上一篇下一篇

猜你喜欢

热点阅读