求C#如何判断我的程序已经有一个实例正在运行了。因我不希望再运行第二个实例了。

zcdg909 2009-02-27 09:56:44
求C#如何判断我的程序已经有一个实例正在运行了。因我不希望再运行第二个实例了。
...全文
603 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
xushiyu2009 2012-07-09
  • 打赏
  • 举报
回复
GOOD
lesn333 2011-06-11
  • 打赏
  • 举报
回复
我想做的却恰恰和你相反
diablozhanghb 2010-01-27
  • 打赏
  • 举报
回复
方法不是很好,基本上是查找进程名称这个方法,如果改个程序名称就判断不了
dai78 2009-03-04
  • 打赏
  • 举报
回复
学习
bomdy 2009-03-04
  • 打赏
  • 举报
回复
我习惯用的代码:

static void Main()
{
bool createNew;
string name = Process.GetCurrentProcess().ProcessName + "Mutex";
using (Mutex mtx = new Mutex(true, name, out createNew))
{
if (!createNew) return;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
猿敲月下码 2009-03-04
  • 打赏
  • 举报
回复
互拆体
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Threading;

namespace FallingGold
{
static class Program
{
private static Mutex mutex;
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
mutex = new Mutex(true, "一个");
//保证只有一个实例运行
if (mutex.WaitOne(0, false))
{
Application.Run(new MaimForm());
}
}
}
}
gaocumt 2009-03-04
  • 打赏
  • 举报
回复
回帖是一种美德!每天回帖即可获得 10 分可用分!
whowhen21 2009-03-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zcdg909 的回复:]
是否可行?看不明白,意思不清楚...
[/Quote]
你去试试看啦,我用了可行的才给你代码的。怎么会不行了呢?
hbmy9107lwt 2009-03-03
  • 打赏
  • 举报
回复
学习
vrhero 2009-03-03
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zcdg909 的回复:]
这两个函数的实际意义是什么,去掉不可以吗?
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
[/Quote]
可以去掉...但是...

去掉第一句...你的程序就不能使用Windows的主题和样式,在XP和Vista中会很难看...

去掉第二句...你的程序不使用GDI+,UI渲染会慢一些,可以与.NET 1.x程序媲美...
zcdg909 2009-03-03
  • 打赏
  • 举报
回复
这两个函数的实际意义是什么,去掉不可以吗?
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
deyter 2009-03-03
  • 打赏
  • 举报
回复
学习
vrhero 2009-03-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zcdg909 的回复:]
是否可行?看不明白,意思不清楚...
[/Quote]
意思很清楚...互斥体,进程间同步...去看MSDN...
北京的雾霾天 2009-03-03
  • 打赏
  • 举报
回复
可以参考以下:


static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
if (Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Length > 1)
{
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
pztx1992 2009-03-03
  • 打赏
  • 举报
回复
呵呵 当初写的代码可读性就是不好,把多个语句写成一行,没有明显的注释,可读性也差,变量名也无具体意义。。。。。

惭愧...
pztx1992 2009-03-03
  • 打赏
  • 举报
回复

if (BI.KillMore())
{
MessageBox.Show(BI.strError);

}
else
{
Application.Run(new Login());
}

public static bool KillMore()
{
int length = System.Diagnostics.Process.GetProcessesByName(System.Diagnostics.Process.GetCurrentProcess().ProcessName).Length;
return length > 1;
}

//没想到刚开始学的一点小东西还有用途
zcdg909 2009-03-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 whowhen21 的回复:]
这样可以实现,而且保证可行:
导入命名空间:
(再Program类中)
using System.Windows.Forms;
using System.Threading;

C# code
static class Program
{
private static Mutex mutex;
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();

[/Quote]

是否可行?看不明白,意思不清楚...
tommir3 2009-03-01
  • 打赏
  • 举报
回复
好办法,学习了。
我以前用的是一个全局变量,如果程序运行,这个变量为NULL,
只有在这个变量为NULL时,才实例化。
whowhen21 2009-03-01
  • 打赏
  • 举报
回复
这样可以实现,而且保证可行:
导入命名空间:
再Program类中
using System.Windows.Forms;
using System.Threading;

static class Program
{
private static Mutex mutex;
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
mutex = new Mutex(true, "OnlyRun");
if (mutex.WaitOne(0, false))
{
Application.Run(new Form1());
}
else
{
MessageBox.Show("程序已经运行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
Application.Exit();
}
}
}
kongdelu2008 2009-02-27
  • 打赏
  • 举报
回复
直接判断对象是否等于null,如果是null的话就说明没有实例,然后你在创建实例,如果不等于null,就不要在创建实例了;
加载更多回复(3)

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧