美文网首页
C#限制程序启动一个

C#限制程序启动一个

作者: 小羊爱学习 | 来源:发表于2024-08-19 16:48 被阅读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();
            }
    

    相关文章

      网友评论

          本文标题:C#限制程序启动一个

          本文链接:https://www.haomeiwen.com/subject/ggwmkjtx.html