使用如下方法保证程序启动唯一实例:
bool ret;
System.Threading.Mutex mutex = new System.Threading.Mutex(true, Application.ProductName, out ret);
if (ret)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FrmMain());
//Main为你程序的主窗体,如果是控制台程序不用这句
mutex.ReleaseMutex();
}
else
{
MessageBox.Show(null, "本程序已经运行", Application.ProductName, MessageBoxButtons.OK,MessageBoxIcon.Warning);
Application.Exit();
}问题:
我想重启程序。
我在代码中使用Application.Restart()后,会提示本程序已经运行。怎样启用唯一实例,又可以实现重新启动程序的功能???
bool ret;
System.Threading.Mutex mutex = new System.Threading.Mutex(true, Application.ProductName, out ret);
if (ret)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FrmMain());
//Main为你程序的主窗体,如果是控制台程序不用这句
mutex.ReleaseMutex();
}
else
{
MessageBox.Show(null, "本程序已经运行", Application.ProductName, MessageBoxButtons.OK,MessageBoxIcon.Warning);
Application.Exit();
}问题:
我想重启程序。
我在代码中使用Application.Restart()后,会提示本程序已经运行。怎样启用唯一实例,又可以实现重新启动程序的功能???
解决方案 »
- C# RSA 自定义KEY 问题.
- 对于datatable,使用 sqldataadapter.update(tb1)功能,是不是这个表的所有字段都会更新呢?不管用户是否修改过?
- c#对word操作wdFieldNumPages 怎样减少总页码数?
- 连接数据库的问题,新人求教!
- 批量删除问题
- 超级菜鸟问题....如何向数据库的一张表里插入数据?
- C#报表
- 怎么给winform中的treeview节点增加鼠标移上和移出的不同样式。
- 我刚刚学习C#,我想问一下怎么才能学好C#
- 为什么我用savefiledialog保存后,我画在panel上的图就不见了???
- c# winform 让lable的值不断变化,可不可以不用时间控件?
- c#多个窗体公用一个socket
new System.Threading.Mutex(true, Application.ProductName).ReleaseMutex();
Application.Restart();
然后调用下面一行来关闭句柄。
(Program.mutex as IDisposable).Dispose();
{
public static System.Threading.Mutex mutex;
static void Main()
{
//...
}
}ps:
把System.Threading.Mutex mutex写成一个静态成员后,就不用在Main()中mutex.ReleaseMutex();
而关闭Mutex可以直接用Program.mutex.Close(); 这里它跟Dispose的作用一样。
{
public static System.Threading.Mutex Run;
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
bool noRun = false;
Run = new System.Threading.Mutex(true, "HumControl", out noRun);
//检测是否已经运行
if (noRun)
{//未运行
Run.ReleaseMutex();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FrmMain());
}
else
{//已经运行
//MessageBox.Show("已经有一个实例正在运行!");
//切换到已打开的实例
}
}
}
需要重新启动时
DialogResult _dlgResult;
_dlgResult = MessageBox.Show("保存设置成功,需要重新启动应用程序后生效。\r\n立即重新启动程序?",
"提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation);
if (_dlgResult == DialogResult.OK)
{
Program.Run.Close();
Application.Restart();
}
Process p = Process.GetCurrentProcess();
p.Kill();