C# WinForm中如何让当前应用程序只允许启动一个实例

我们在WinForm开发中,很多情况下是需要只允许让用户运行一个实例,那么代码其实很简单。只需要修改Program.cs文件,代码如下

 static class Program
    {

        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            //Application.EnableVisualStyles();
            //Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new Fm_Login());
            bool noRun;
            //判断是否已经有需要运行一个实例,如果系统没有,则运行一个
            using (System.Threading.Mutex m = new System.Threading.Mutex(true, Application.ProductName, out noRun))
            {
                if (noRun)
                {
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    Form Login = new Fm_Login();
                    Login.ShowDialog();//显示登陆窗体
                    if (Login.DialogResult == DialogResult.OK)
                    {
                        Application.Run(new Fm_main());
                    }//判断登陆成功时主进程显示主窗口
                    else return;
                }
                else {
                    MessageBox.Show("目前已有一个程序在运行,请勿重复运行程序","提示");
                }
            }

        }
    }
时间: 2024-09-30 10:40:11

C# WinForm中如何让当前应用程序只允许启动一个实例的相关文章

【转】delphi程序只允许运行一个实例的三种方法:

一.        创建互斥对象 在工程project1.dpr中创建互斥对象 Program project1 Uses Windows,Form, FrmMain in 'FrmMain.pas' {MainForm}; {$R *.res} var hAppMutex: THandle; //声明互斥变量 begin hAppMutex := CreateMutex(nil, false,’projectname’); //创建互斥对象projectname工程名称 if ( (hAppM

C#应用程序只允许运行一个实例,多次运行的时候激活当前实例,显示其界面

很多时候,我们开发的程序,需要单例运行的的功能,即整个应用程序只允许同时运行最多一个实例,重复运行的时候,激活当前实力,显示其界面. 在C#程序中,其解决方案有多重,可以参照Charles Chen 的C#程序只允许运行一个实例的解决方案一文. 参照其文章,我决定使用调用Windows Api的方法,大致如下: namespace BarCodeSystem { public static class Program { /// <summary> /// Application Entry

解决C#程序只允许运行一个实例的几种方法详解

方法一:使用线程互斥变量. 通过定义互斥变量来判断是否已运行实例.把program.cs文件里的Main()函数改为如下代码: using System; using System.Windows.Forms; using System.Runtime.InteropServices; namespace NetTools { static class Program { [DllImport("user32.dll")] private static extern bool Flas

C#程序只允许运行一个实例的解决方案

最近在做winform的程序中,需要只能打开一个程序,如果已经存在,则激活该程序的窗口,并显示在最前端.在网上google了一哈,找到了很多的解决方案.这里我整理了3种方案,并经过了测试,现和朋友们分享: 一.使用用互斥量(System.Threading.Mutex) 同步基元,它只向一个线程授予对共享资源的独占访问权.在程序启动时候,请求一个互斥体,如果能获取对指定互斥的访问权,就职运行一个实例. 代码 bool createNew;            using (System.Thr

程序只启动一个实例的几种方法

我们在使用<金山词霸>时发现,在<金山词霸>已经运行了的情况下,再次点击<金山词霸>的图标,那么它不会再运行另外一个<金山词霸>,而是将已有的<金山词霸>给激活,始终只能运行一个<金山词霸>的实例. 在我们的程序当中如果要实现类似<金山词霸>的功能,就要解决两个问题,首先是要判断该程序已有一个实例在运行,其次是要将已运行的应用程序实例激活,同时退出第二个应用程序实例.  对于第一个问题,我们可以通过设置命名互斥对象或命名信

WinForm程序,实现只启动一个实例

前言:在我们做的软件中,当点击图标运行时,正常的需求是只需要启动一个软件的实例,这是非常重要的一点,不然就显得我们的软件非常的山寨,笔者在工作中经常遇到同事没有注意这一点,看是不重要,实则非常的重要,这里在C#中进行实现. 注:代码需写在Program.cs中,具体代码如下: 1 static class Program 2 { 3 4 /// <summary> 5 /// 该函数设置由不同线程产生的窗口的显示状态. 6 /// </summary> 7 /// <para

使用cefsharp在winform中嵌套浏览器,解决程序闪退问题,你也可以做一个红芯浏览器^v^

使用cefsharp在winform中嵌套浏览器 简单使用cefsharp在winform中嵌套浏览器 在上一节,我们学习了如何简单地在winform中嵌入chromium浏览器,我在使用这个开发项目时,需要点击一个按钮,弹出嵌入浏览器的窗体,出现一个问题,就是第一次点击按钮可以正常打开浏览器,第二次点击就会出现卡壳,闪退问题.由于对于chromium这个庞大的程序不太了解,上网搜索相关文章解决了该问题: 就是在嵌入浏览器的窗体类中不能用Cef.shutdown();需要在调用的主窗体中才能调用

C# WinForm 判断程序是否已经在运行,且只允许运行一个实例

static class Program {   /// <summary>   /// 应用程序的主入口点.   /// </summary>   [STAThread]   static void Main()   {     Application.EnableVisualStyles();     Application.SetCompatibleTextRenderingDefault(false);     //1.这里判定是否已经有实例在运行     //只运行一个实

Winform程序只允许运行一个程序实例

/// <summary> /// 应用程序的主入口点. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); /* * 利用互斥变量来控制应用程序只能运行一个 */ bool bRun = true; va