`

C# WinForm 只运行一个程序实例

 
阅读更多

方法一:

  

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Reflection;

namespace WinFormStudy
{
    static class Program
    {

        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Process instance = RunningInstance();
            if (instance == null)
            {
                //没有实例在运行
                Application.Run(new Form1());
            }
            else
            {
                //已经有一个实例在运行
                HandleRunningInstance(instance);
            }
        }
        #region  确保程序只运行一个实例
        private static Process RunningInstance()
        {
            Process current = Process.GetCurrentProcess();
            Process[] processes = Process.GetProcessesByName(current.ProcessName);
            //遍历与当前进程名称相同的进程列表  
            foreach (Process process in processes)
            {
                //如果实例已经存在则忽略当前进程  
                if (process.Id != current.Id)
                {
                    //保证要打开的进程同已经存在的进程来自同一文件路径
                    if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == current.MainModule.FileName)
                    {
                        //返回已经存在的进程
                        return process;
                        
                    }
                }
            }
            return null;
        }

        private static void HandleRunningInstance(Process instance)
        {
            MessageBox.Show("已经在运行!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
            ShowWindowAsync(instance.MainWindowHandle, 1);  //调用api函数,正常显示窗口
            SetForegroundWindow(instance.MainWindowHandle); //将窗口放置最前端
        }
        [DllImport("User32.dll")]
        private static extern bool ShowWindowAsync(System.IntPtr hWnd, int cmdShow);
        [DllImport("User32.dll")]
        private static extern bool SetForegroundWindow(System.IntPtr hWnd);
        #endregion
    }
}

 

 

方法二:

  

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace WinFormStudy
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            bool ret;
            System.Threading.Mutex m = new System.Threading.Mutex(true, Application.ProductName, out   ret);
            if (ret)
            {
                System.Windows.Forms.Application.EnableVisualStyles();   //这两行实现   XP   可视风格   
                System.Windows.Forms.Application.DoEvents();   
                System.Windows.Forms.Application.Run(new Form1());
                //  frmMain   为你程序的主窗体,如果是控制台程序不用这句   
                m.ReleaseMutex();
            }
            else
            {
                MessageBox.Show(null, "有一个和本程序相同的应用程序已经在运行,请不要同时运行多个本程序。\n\n这个程序即将退出。", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                // 提示信息,可以删除。   
                Application.Exit();//退出程序   
            }
        }
    }
}

 

 

转自:http://www.cnblogs.com/freeliver54/archive/2008/11/22/1338816.html

分享到:
评论

相关推荐

    C# WinForm 只能运行一个实例

    在C#编程中,开发Windows桌面应用程序时,我们可能会遇到这样的需求:确保用户只能打开一个WinForm应用程序实例。这通常是为了防止多个实例同时运行导致的数据冲突或其他问题。本篇文章将详细探讨如何实现C# WinForm...

    C# 只能运行一个winForm进程

    C# 只能运行一个winForm进程是指在C#中实现单实例应用程序,确保同一个应用程序只能运行一个实例,以避免资源浪费和混乱。下面将详细介绍如何实现单实例应用程序。 单实例应用程序的实现 在C#中,实现单实例应用...

    c# winform实例大全(198个Csharp WinForm实例源码)

    《C# WinForm实例大全》是一份集合了198个Csharp WinForm应用程序实例的资源库,旨在帮助开发者深入理解和掌握C#编程语言在Windows桌面应用开发中的实践技巧。WinForm是.NET Framework中用于创建图形用户界面(GUI)...

    198个经典C#WinForm实例源码(全面)

    每个实例都代表了一个特定的技术点,通过查看源代码并运行程序,开发者可以深入理解各种功能的实现方法,进而提升自己的编程技能。这些实例对于初学者来说是宝贵的自学材料,对于有经验的开发者则是快速解决问题的...

    c# winform实例大全(198个经典Csharp WinForm实例源码)

    C# WinForm是.NET框架中的一个重要组成部分,它提供了丰富的用户界面开发工具,使得开发者可以构建出功能强大、界面友好的桌面应用程序。这份“C# WinForm实例大全”包含了198个经典实例,覆盖了从基础控件操作到...

    经典C#WinForm实例

    在C#编程领域,Windows Forms(WinForm)是一种常见的用于构建桌面应用程序的框架。这个"经典C# WinForm实例"集合提供了一些实用的代码示例,可以帮助开发者掌握WinForm的基本用法以及一些高级技巧。下面将详细介绍...

    198个经典C#WinForm实例源码

    C#是一种广泛应用于Windows桌面应用开发...每一个实例都是一个小型的项目,通过实际运行和调试,有助于加深对C#语法和WinForm框架的理解。无论是初学者还是经验丰富的开发者,这个资源库都能提供宝贵的学习和参考资料。

    c# Winform只能运行一个实例源码

    本文将详细解释如何实现Winform程序只允许运行一个实例,并提供三种不同的方法来实现这一功能。 #### 方法一:使用Mutex对象 这种方法利用了Windows操作系统提供的Mutex(互斥锁)机制来限制程序的多次启动。Mutex...

    198个经典C#WinForm实例源码(超赞).7z

    标题中的“198个经典C# WinForm实例源码(超赞).7z”指的是一个包含198个C#编程语言实现的Windows Forms(WinForm)应用程序实例的压缩包。这些实例对于正在学习C#和WinForm开发的开发者来说,是极具价值的学习资源。...

    198个经典c#winform实例源码(超赞

    对于C#新手而言,这是一个很好的起点,能够帮助他们快速上手;而对于有经验的开发者,这些实例同样能提供新的灵感和解决问题的方法。总之,这个资源库对任何想要深入理解C# WinForm开发的人来说都是极其宝贵的。

    198个经典C#WinForm实例源码+C#入门必看的实例程序100个

    WinForm是.NET Framework中的一个组件,用于创建桌面应用程序的用户界面。 1. C#基础语法:C#的基础包括变量、数据类型、运算符、控制流(如if语句、for循环、while循环)和函数。通过这些实例,初学者可以深入理解...

    C#Winform实现打开第三方应用程序实例

    在C# WinForm开发中,有时我们需要集成或调用系统中已经安装的第三方应用程序,以扩展我们应用程序的功能或提供更多的用户交互。这个实例将详细讲解如何在C# WinForm应用中实现这一目标。 首先,我们需要了解`...

    c# winform 定时开启关闭小程序

    在本文中,我们将深入探讨如何使用C# WinForm开发一个定时开启和关闭小程序。这个程序允许用户设置定时任务,以精确到秒的精度自动启动或关闭指定的应用程序。要实现这样的功能,我们需要理解C#的基础知识,WinForm...

    C# WinForm最小化隐藏到托盘实例

    在C#编程中,WinForm应用经常需要实现窗口最小化时隐藏到系统托盘区的功能,这能够提供更好的用户体验,使应用程序在用户不主动关闭时仍然保持后台运行。本实例"**C# WinForm最小化隐藏到托盘实例**"正是针对这一...

    Winform只允许打开一个实例

    ### Winform只允许打开一个实例 在Windows Forms(Winform)应用程序开发中,有时我们希望程序只能运行一个实例,即用户不能重复启动该程序。这种需求常见于许多单例模式的应用场景,例如系统托盘程序、后台服务等...

    一个不错的C#WinForm程序示例

    这个“一个不错的C# WinForm程序示例”是你的老师所创建的,其目的是为了教学,帮助初学者更好地理解和实践C#与WinForm的结合使用。 在C#中,WinForm是通过控件来构建用户界面的,如按钮、文本框、标签、列表视图等...

    winform只运行一个实例

    winform窗体只运行一个,确保程序只运行一个实例,当该实例已在运行时候,唤醒此实例不会另开一个新的实例

    198个经典C#WinForm实例源码(超赞)

    每个实例源码都会包含一个或多个关键知识点,通过阅读代码、运行程序并理解其工作原理,你可以快速提升C# WinForm编程技能。同时,这也是一个很好的实践平台,可以帮助你理解和运用面向对象设计原则,例如封装、继承...

    198个经典C#WinForm实例源码(超赞).zip

    "198个经典C# WinForm实例源码(超赞).zip"是一个集合了198个C# WinForm应用程序的源代码库,对于初学者和有经验的开发者来说,都是一个宝贵的资源。 1. **C#基础概念**:WinForm是.NET Framework的一部分,用于构建...

Global site tag (gtag.js) - Google Analytics