C# WinForm 程序如何只允许运行一个实例 ?

[复制链接]
查看11 | 回复3 | 2009-12-5 23:39:26 | 显示全部楼层 |阅读模式
//我来补充注释啦static void Main()
{
bool canCreateNew; //用来承接是否已经有一个实例在运行的布尔变量
//限制单例运行
Mutex m = new Mutex(
true //如果为 true,则给予调用线程已命名的系统互斥体的
//初始所属权(如果已命名的系统互斥体是通过此调用创建的);
//否则为 false。
, "AnyName" //Mutex 的名称。如果值为 null,
//则 Mutex 是未命名的。
, out canCreateNew //在此方法返回时,如果创建了局部互斥体
//(即,如果name为null或空字符串)或指定的命名系统互斥体,
//则包含布尔值 true;如果指定的命名系统互斥体已存在,
//则为 false。该参数未经初始化即被传递。
);
if (canCreateNew)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FormMain());
m.ReleaseMutex();
//必须
}
else
{
//
}
}
回复

使用道具 举报

千问 | 2009-12-5 23:39:26 | 显示全部楼层
楼上的不太好.还写死了"WindowsFormApplication1"///
/// 应用程序的主入口点。
///
[STAThread]
static void Main()
{
ConfigManager.LoadConfiguration();//这里我是读了配置,是否允许多实例
if (Global.GlobalVariable.SingleInstance) //如果配置不允许多实例
{
Process pCurrent = Process.GetCurrentProcess();
Process[] pList = Process.GetProcessesByName(pCurrent.ProcessName);
if (pList.Length >= 2)
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new LoginForm());
}
回复

使用道具 举报

千问 | 2009-12-5 23:39:26 | 显示全部楼层
lcg1986的方法好点 通过配置信息控制的话程序会灵活许多
回复

使用道具 举报

千问 | 2009-12-5 23:39:26 | 显示全部楼层
[STAThread]
static void Main()
{
bool CreateNew;
System.Threading.Mutex mutex = new System.Threading.Mutex(false, "WindowsFormsApplication1", out CreateNew);
if (!CreateNew)
{
System.Windows.Forms.MessageBox.Show("程序已运行");
Application.Exit();
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行