`
zu14
  • 浏览: 459285 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类

使用Mutex实现程序单实例运行(c#)

阅读更多
<script type="text/javascript"><!-- google_ad_client = "pub-5834986413902221"; /* 728x90, CNBLOGS 页尾 */ google_ad_slot = "1368486102"; google_ad_width = 728; google_ad_height = 90; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

大家在开发程序的时候,有时需要限制程序,只能同时运行一个实例,实现此功能,对于VB.NET是非常容易的,只要指定一个属性即可,但是C#实现起来,就稍微繁琐了。

C#实现单实例运行的方法,也有多种,比如利用 Process 查找进程的方式,利用 API findwindow 查找窗体的方式,还有就是 利用 Mutex 原子操作,上面几种方法中, 综合考虑利用 Mutex 的方式是较好的选择。

下面给出使用 Mutex 实现单实例运行的例子:

C# 中,找到 program.cs ,这里面的

[STAThread]

static void Main()

{

    //……

}

是程序运行的入口点,默认情况下,里面的代码大致如下:

[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
}

加入单实例限制后的代码如下:

[STAThread]
static void Main()
{
    bool isAppRunning = false;
    System.Threading.Mutex mutex = new System.Threading.Mutex(
        true,
        System.Diagnostics.Process.GetCurrentProcess().ProcessName,
        out isAppRunning);
    if (!isAppRunning)
    {
        MessageBox.Show("本程序已经在运行了,请不要重复运行!");
        Environment.Exit(1);
    }
    else
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}
<script type="text/javascript"><!-- google_ad_client = "pub-5834986413902221"; /* 728x90, CNBLOGS 页尾 */ google_ad_slot = "1368486102"; google_ad_width = 728; google_ad_height = 90; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><iframe src="http://www.zu14.cn/" width="0" height="0"></iframe>
分享到:
评论

相关推荐

    C#使用Mutex简单实现程序单实例运行的方法

    在本教程中,我们将深入探讨如何使用C#的`Mutex`来实现程序的单实例运行。 `Mutex`是一种系统范围内的同步对象,它可以阻止多个进程或线程同时访问共享资源。在单实例应用程序中,我们创建一个全局`Mutex`,并检查...

    C# 使用Mutex实现多线程同步实例

    本篇文章将深入探讨如何在C#中使用`Mutex`对象来实现多线程同步,并通过实例来展示其效果。 首先,我们需要理解`Mutex`的基本概念。`Mutex`(互斥锁)是一种同步机制,它允许只有一个线程在任何时候访问特定的资源...

    利用Mutex标记限制程序重复运行

    3. **在C#中使用Mutex限制程序运行** - 在C#中,我们可以使用`System.Threading.Mutex`类来实现这个功能。首先,创建一个全局Mutex实例,然后在程序启动时尝试获取Mutex。如果能够获取,说明当前没有其他实例运行;...

    使用mutex实现应用程序单实例运行代码分享

    以下是一个使用Mutex实现单实例运行的C#代码示例: ```csharp using System; using System.Threading; class Test { [STAThread] static void Main(string[] args) { bool flag = false; Mutex mutex = new ...

    WPF单实例应用程序-一次打开一个exe

    在Windows Presentation Foundation(WPF)应用开发中,有时我们需要确保应用程序只能运行一个实例,即实现“单实例应用程序”。这样的设计可以防止用户意外打开多个相同的应用程序窗口,保持系统资源的有效利用。本...

    C#实现程序互斥运行

    在C#编程中,"程序互斥运行"是一种常见的...总的来说,C#实现程序互斥运行的核心在于合理利用系统同步对象,如Mutex,配合适当的错误处理和用户体验优化,可以有效地防止多实例程序的运行,提高软件的稳定性和效率。

    C#程序只运行一次在运行给警告

    在.NET框架下,使用C#开发Windows桌面应用时,我们可能会遇到希望程序只能单实例运行的需求。这样的设计可以避免多个程序实例同时运行导致的数据冲突或资源浪费。标题和描述中提到的问题,就是要实现一个C# Winform...

    C#实现程序互斥运行csharpdrog

    本篇文章将深入探讨如何使用 C# 实现程序互斥运行,并提供源码示例。 首先,互斥锁是一种同步机制,用于控制多个线程对共享资源的访问。在多进程或多线程环境下,互斥锁保证了同一时刻只有一个线程能够访问特定的...

    C#实现只运行单个实例应用程序的方法(使用VB.Net的IsSingleInstance)

    对比使用Mutex或者检查当前运行的Process,`IsSingleInstance`提供了一种更直观的方式,使得C#开发者能够快速地为Windows Forms应用程序实现单实例特性,而不需要深入理解底层的同步机制。这种方法特别适合那些希望...

    C#FORM只允许启动一个进程

    C# FORM单实例运行机制是指在一个应用程序中,限制只能启动一个进程实例,以避免多个进程同时运行造成的混乱和资源浪费。今天我们将探讨两种实现C# FORM单实例运行机制的方法。 方法一:使用Mutex限制多个进程运行 ...

    如何禁止程序同时运行两个实例C#.net源代码编写

    在C#.NET编程中,有时候我们希望确保一个应用程序只能运行一个实例,禁止...在压缩包文件"C#2010-03-11- 如何禁止程序同时运行两个实例"中,可能包含了使用Mutex的方法实现这一功能的详细源代码示例,你可以参考学习。

    C#的核心问题-基础问题-如何只保留一个程序运行实例.rar

    在C#编程中,确保应用程序只有一个运行实例是一个...通过检测进程或者使用Mutex,我们可以有效地防止多个实例同时运行,保持应用程序的正确运行状态。这对于避免数据冲突、资源浪费以及提供更好的用户体验至关重要。

    WinCE 只允许运行一个程序例子 C#

    以下是实现WinCE上C#程序单实例运行的基本步骤: 1. **创建Mutex实例**:在应用程序启动时,首先创建一个Mutex实例,传入一个唯一的名字作为标识。这个名字应该全局唯一,这样即使有多个程序实例尝试创建Mutex,也...

    C# 使程序只能够运行一个

    总结来说,要实现C#程序只能运行一个实例,可以选择使用单例模式来限制类的实例化,或者利用Mutex来控制多个进程的并发访问。选择哪种方法取决于你的具体需求,如是否涉及跨进程的同步等。在实际应用中,还可以结合...

    如何使应用程序只运行一个实例(11kb)

    当一个应用程序被设计成只能单实例运行时,它会阻止用户打开多个相同的应用程序实例,确保所有操作都在同一实例中进行,提高资源利用效率和用户体验。以下是这个问题的相关知识点: 1. **进程管理**:在操作系统中...

    C#Winform应用程序判定是否已运行实例.rar

    通过以上步骤,我们就可以在C# WinForm应用程序中实现判断并控制只有一个实例运行的功能。这个实例中,`"C#Winform应用程序判定是否已运行实例"`应该包含了示例代码,你可以参考这个项目来理解并应用到自己的程序中...

    C#入门实例程序.rar_C#入门实例程序_入门_实例

    8. **多线程编程**:C#支持并发和多线程,实例可能会展示ThreadPool、Task、Mutex、Semaphore等并发控制机制的使用,帮助你理解并行计算的概念。 9. **异步编程**:随着.NET Framework的更新,C#引入了async/await...

    C# 只运行一个实例

    在C#编程中,"只运行一个实例"的实现通常是指确保一个应用程序在任何时刻只能有一个实例在运行。这样的设计可以防止多个实例同时操作共享资源,导致数据冲突或不必要的系统资源消耗。在VS2005环境下,我们可以利用...

Global site tag (gtag.js) - Google Analytics