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

如何判断C# WinForm程序是否已经在运行,且只允许运行一个实例是一个比较常见的问题,可以通过以下几个步骤来解决:

1.通过进程判断是否已经存在实例

可以通过进程名或进程ID来判断是否已经存在了实例。以下是代码示例:

using System.Diagnostics;

bool isRunning = false;
string currentProcessName = Process.GetCurrentProcess().ProcessName;
Process[] allProcesses = Process.GetProcesses();
foreach (Process process in allProcesses)
{
    if (process.ProcessName == currentProcessName)
    {
        if (process.Id != Process.GetCurrentProcess().Id)
        {
            isRunning = true;
            break;
        }
    }
}
if (isRunning)
{
    MessageBox.Show("程序已经在运行中!");
    Application.Exit();
}

上面的代码通过获取本地正在运行的所有进程,判断是否有当前进程名相同的进程,如果存在,则说明已经有一个实例在运行中。

2.通过Mutex实现同步访问控制

另外一种方式是使用Mutex类来实现同步访问控制。以下是代码示例:

using System.Threading;

bool isRunning;
Mutex mutex = new Mutex(true, "MyMutex", out isRunning);
if (!isRunning)
{
    MessageBox.Show("程序已经在运行中!");
    mutex.ReleaseMutex();
    Application.Exit();
}

上面的代码首先声明一个名为MyMutex的互斥量,如果不存在这个互斥量,则创建一个并将其所有权初始归属为调用线程。如果已经存在了这个互斥量,那么Mutex类构造函数的返回值为false,此时将isRunning设置为false,表示程序已经运行中,然后释放这个互斥量,退出应用程序。

以上两种方法可以在程序中任选其一来判断并控制程序的运行实例,建议使用第一种方法进行判断。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# WinForm 判断程序是否已经在运行,且只允许运行一个实例,附源码 - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • C#中属性和成员变量的区别说明

    C#中属性和成员变量是两个不同的概念。在C#编程中,开发者需要清楚了解它们之间的区别和联系。下面是对属性和成员变量的详细解释: 成员变量是一个类的内部状态访问的变量,可以存储数据。而属性则提供了一种更加灵活的方式,用于类之间的交互和数据的访问。 成员变量可以是公共的、私有的,也可以是保护的。它们可以被其他的类直接访问,也可以通过类中方法来进行调用。成员变量在…

    C# 2023年5月31日
    00
  • 理解C#中的事件

    理解C#中的事件可以分为以下几个步骤: 1. 事件的定义 在C#中,可以通过delegate关键字定义一个委托类型,并在委托类型的参数列表中定义事件所需要传递的参数,例如: public delegate void EventHandler(object sender, EventArgs e); 其中,EventHandler就是一个委托类型,它有两个参数…

    C# 2023年5月14日
    00
  • aspnet_isapi.dll设置图文方法.net程序实现伪静态

    下面我将为您详细讲解“aspnet_isapi.dll设置图文方法.net程序实现伪静态”的完整攻略。 什么是ASP.NET伪静态? ASP.NET伪静态,简单说就是通过修改URL结构来优化网站,让搜索引擎更好地抓取和检索。原始URL包含参数和动态标识,而ASP.NET伪静态通过修改URL结构,将参数转换为目录形式,将动态标识转换为静态标识,从而实现网页地址…

    C# 2023年6月6日
    00
  • asp.net javascript 文件无刷新上传实例代码第2/2页

    首先我们需要明确一下本文的主题,它是关于使用ASP.NET框架和JavaScript技术来实现无刷新上传文件功能的攻略。接下来,我会详细讲解这个实例代码的代码结构和实现过程,并附加两个示例说明。 一、代码结构 这个实例由两个部分组成: Default.aspx:这个页面包含一个表单和一些JavaScript代码。 UploadFile.ashx: 这个处理程…

    C# 2023年5月31日
    00
  • C#读取命令行参数的方法

    下面我就为你详细讲解C#读取命令行参数的方法。 1. 什么是命令行参数 命令行参数是指在程序启动时,通过命令行传递给程序的一些参数。在C#中,可以通过string[] args参数的形式来读取命令行参数,其中args是一个存储程序启动参数的字符串数组。 2. 读取命令行参数的方法 要读取命令行参数,只需要在程序的Main函数中添加一个string[] arg…

    C# 2023年6月7日
    00
  • 利用lambda表达式树优化反射详解

    利用Lambda表达式树优化反射是一种通过创建表达式树来动态地访问类型的方法,它可以提高程序的效率。在这种方法中,通过表达式树来创建委托,从而避免了动态反射访问的性能瓶颈。下面是利用Lambda表达式树优化反射的详细攻略: 1. 定义一个委托类型 首先我们需要定义一个委托类型,用于表示将要执行的方法。例如: delegate int MyDelegate(s…

    C# 2023年6月7日
    00
  • C#实现打字游戏

    C#实现打字游戏 简介 打字游戏是一个有趣且有益的游戏,它可以帮助人们提高打字速度。本文将介绍如何使用C#编写打字游戏。我们需要实现以下功能:1. 显示待输入的字符串。2. 监听键盘输入并与待输入的字符串进行比对。3. 统计输入的正确字符数和错误字符数及其所占的比例。4. 显示剩余时间。5. 完成游戏后显示得分。 实现方法 步骤一:创建项目 打开Visual…

    C# 2023年6月7日
    00
  • 带着问题读CLR via C#(笔记二)类型基础

    首先,你需要明确CLRviaC#是一本深入CLR和C#的书籍,针对读者提出了一系列问题,通过深入讲解各种类型的基础知识来解答这些问题。因此,想要完整掌握CLRviaC#,需要掌握以下几个步骤: 1. 阅读笔记前先阅读CLRviaC#原著 CLRviaC#是一本非常优秀的书籍,但它也是非常深入的一本书籍。为了能够真正理解笔记,你需要先阅读原著,并掌握其中的主要…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部