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#递归实现显示文件夹及所有文件并计算其大小的方法”的完整攻略。 1. 确定递归终止条件 首先,我们要确定递归的终止条件。在本题中,终止条件一般是当遍历到文件时,直接输出文件的名称和大小,并返回上一级目录继续遍历。因此,我们可以使用File和Directory类来判定当前路径是否为文件或目录,并在遇到文件时直接输出。 2. 确定遍历方式 其次,我们需…

    C# 2023年6月1日
    00
  • Unity多语言转换工具的实现

    Unity多语言转换工具的实现攻略 背景 在Unity游戏开发应用途中,多语言支持是必不可少的功能,为了能够让游戏适应不同的国家或地区,我们需要使用多语言转换工具实现简单的针对不同语言的转换和输出。 实现方法 我们可以通过以下步骤实现Unity多语言转换工具: 1. 创建语言文件 先在项目中创建多个不同语言的语言文件(如中文语言文件、英文语言文件等),并将这…

    C# 2023年5月31日
    00
  • C#微信开发之发送模板消息

    C#微信开发之发送模板消息完整攻略 概述 微信模板消息是一种微信提供的消息推送方式,可以让开发者向用户主动发送重要信息,如订单状态变更、交易成功、活动通知等。本文将介绍如何在C#中使用微信公众号(WeChat Official Account)的API发送模板消息,包括准备工作、代码实现和注意事项。 准备工作 获得微信公众号的appid和appsecret,…

    C# 2023年6月1日
    00
  • .Net Core项目中NLog整合Exceptionless实例

    .NET Core项目中NLog整合Exceptionless实例 NLog是一个流行的日志记录库,可以在.NET Core项目中使用。Exceptionless是一个开源的错误和日志记录平台,可以帮助开发人员快速识别和解决问题。本文将介绍如何在.NET Core项目中整合NLog和Exceptionless,以便更好地记录和管理日志和错误。 准备工作 在开…

    C# 2023年5月17日
    00
  • 解决ASP.NET Core中使用漏桶算法限流的问题

    解决ASP.NET Core中使用漏桶算法限流的问题 在ASP.NET Core应用程序中,限流是一种常见的技术,用于控制应用程序的流量并防止过载。漏桶算法是一种常见的限流算法,它可以平滑地限制请求的速率。在本攻略中,我们将详细讲解如何在ASP.NET Core中使用漏桶算法限流,并提供两个示例说明。 步骤一:安装NuGet包 要使用漏桶算法限流,您需要安装…

    C# 2023年5月17日
    00
  • C#复制数组的两种方式及效率比较

    C#复制数组的两种方式及效率比较 在C#编程中,复制数组是一项非常常见的操作。本文将介绍C#中复制数组的两种方式,并通过对比它们的效率,得出更为高效的复制方式。 1. 使用Array.Copy方法 Array.Copy方法是C#中复制数组的最基本方式之一。该方法的语法如下: Array.Copy(Array sourceArray, Array destin…

    C# 2023年6月7日
    00
  • asp.net core中灵活的配置方式详解

    ASP.NET Core中灵活的配置方式详解 ASP.NET Core提供了多种配置方式,以便开发人员可以根据应用程序的需要选择最适合的配置方式。本文将介绍ASP.NET Core中的灵活配置方式,包括: appsettings.json文件 环境变量 命令行参数 用户机密存储 1. appsettings.json文件 appsettings.json文件…

    C# 2023年5月16日
    00
  • C#多线程之Thread中Thread.Join()函数用法分析

    当我们使用C#中的多线程编程时,有时候需要在主线程中等待子线程完成后再继续执行。Thread.Join()函数就是用来实现这一功能的。本文将全面介绍Thread.Join()函数的用法及示例说明。 什么是Thread.Join()函数 Thread.Join()函数是Thread类中的一个方法,它的作用是阻塞主线程,直到当前线程执行完成。当调用Thread.…

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