[置顶] [WinForm]C# .net防止一个程序(WinForm)重复运行的方法。

6214人阅读 评论(2) 收藏 举报
分类:

最近比较忙,邮件预警系统暂停了没时间去处理,临时处理:直接执行exe文件!

可是问题来了:


我点击了两次,原来几乎在同时执行这个进程,我在程序中有线程时间睡眠2秒一次等待队列,打开进程果然两个MAIL.EXE进程,就想在执行前做一个判断阻止重复执行!

//在写一些服务型的软件的时候,你可能不希望一个操作系统里有两个副本在运行,这样也许会扰乱你的操作。这时,你就需要限制程序的副本。下面的这个方法,很简单的就可以实现上述功能。

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

namespace TestProcessCount
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            int processCount = 0;
            Process[] pa = Process.GetProcesses();//获取当前进程数组。
            foreach (Process PTest in pa)
            {
                if (PTest.ProcessName == Process.GetCurrentProcess().ProcessName)
                {
                    processCount += 1;
                }
            }
            if (processCount > 1)
            {
                //如果程序已经运行,则给出提示。并退出本进程。
                DialogResult dr;
                dr = MessageBox.Show( Process.GetCurrentProcess().ProcessName+"程序已经在运行!", "退出程序", MessageBoxButtons.OK, MessageBoxIcon.Error);
//可能你不需要弹出窗口,在这里可以屏蔽掉
                return; //Exit;
              
            }
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new frmBrowser());
        }
    }
}

通常会把提示信息禁止掉。一般做任务预警是在后台自动运行。。

查看评论

C# WinForm 防止子窗口重复弹出

C# WinForm程序如何防止子窗口重复弹出
  • zshuaihua
  • zshuaihua
  • 2014年08月14日 11:29
  • 3687

winform防止界面卡死的三种方法

在编程过程中经常会遇到耗时操作,这个时候如果不采取一些必要的异步操作,就会导致界面的卡死,这里以winform为例子,介绍三种方法防止界面卡死,对这几个方法稍加修改同样适用于wpf,silverlig...
  • xiaomingelv
  • xiaomingelv
  • 2015年01月12日 22:55
  • 8888

C# 避免程序重复启动(二次启动)

 采用近程互斥的方法。[STAThread]static void Main(string[] args) ...{bool requestInitialOwnership = true;bool m...
  • kennba
  • kennba
  • 2007年03月21日 14:01
  • 1524

C#禁止一个程序多次打开

方案一://判断是否已经存在一个exe     是要写在main函数里面的     [STAThread]     static   void   Main()       {     bool   ...
  • xwqjamky
  • xwqjamky
  • 2007年08月31日 00:01
  • 619

C#检测同个程序被打开或运行多次

有时在做一个C#的程序时,你并不希望用户重复打开多个,为了避免程序被重复打开所带来的不确定因素,就需要在程序运行前做一些处理,来提示使用者。这里提供一种方法,亲测有效。 在项目的第一个窗体的启动事件中...
  • qq_28215385
  • qq_28215385
  • 2017年10月19日 13:55
  • 489

C# 定时执行函数(winForm)

需要使用timer 定时器控件 timer1.Interval 设置时间间隔timer1.Tick 到达时间间隔时触发事件test_tick 时间处理函数timer1.Tick   +=   new ...
  • xujianrj
  • xujianrj
  • 2008年02月20日 14:34
  • 8621

c#实现每隔一段时间执行代码(多线程)

总结以下三种方法,实现c#每隔一段时间执行代码: 方法一:调用线程执行方法,在方法中实现死循环,每个循环Sleep设定时间; 方法二:使用System.Timers.Timer类; ...
  • luckypeng
  • luckypeng
  • 2016年02月18日 23:01
  • 5571

C#防止程序重复运行

很多的软件都支持一次只能运行一个程序,比如迅雷。一直搞不清楚这个是怎么做的。最近正好做了一个小工具,需要一个用户在一个网域内只能开启一个这个小工具。具体的需求是:说的通俗简单就是,有一台服务器,用户用...
  • gengchengxiang
  • gengchengxiang
  • 2007年08月17日 16:12
  • 1789

C# 禁止windows程序重复运行的两种基本方法

 一般有两种方法,个人喜欢第二种 方法1: 在项目的第一个窗体的启动事件中 如form1_load() 中添加如下语句 #region 判断系统是否已启动             S...
  • cytghost
  • cytghost
  • 2016年07月11日 12:36
  • 94

[WinForm]C# .net防止一个程序(WinForm)重复运行的方法。

最近比较忙,邮件预警系统暂停了没时间去处理,临时处理:直接执行exe文件! 可是问题来了: 我点击了两次,原来几乎在同时执行这个进程,我在程序中有线程时间睡眠2秒一次等待队列,打开进程果然两个MA...
  • david_520042
  • david_520042
  • 2013年11月05日 08:44
  • 6214
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 257万+
    积分: 3万+
    排名: 134
    博客专栏
    最新评论
    文章存档