我做的是winform程序,,我想实现单实例启动,就是只能启动一个窗体,现在我的做法是:
bool b= true;
Mutex mutex = new Mutex(true, “name”, out b);
if (!b)
{
this.Shutdown();
return;
}可是这样做的话,仍然能够时常启动,好像是Mutex的一个回收机制的原因,可是怎么能实现只启动一个窗口呢?谢谢!
bool b= true;
Mutex mutex = new Mutex(true, “name”, out b);
if (!b)
{
this.Shutdown();
return;
}可是这样做的话,仍然能够时常启动,好像是Mutex的一个回收机制的原因,可是怎么能实现只启动一个窗口呢?谢谢!
/// <summary>
///
/// </summary>
/// <param name="lpClassName"></param>
/// <param name="lpWindowName"></param>
/// <returns></returns>
[DllImport("user32.dll", EntryPoint = "FindWindow")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
/// <summary>
///
/// </summary>
/// <param name="hwnd"></param>
/// <returns></returns>
[DllImport("user32.dll", EntryPoint = "SetForegroundWindow")]
public static extern IntPtr SetForegroundWindow(IntPtr hwnd);/// <summary>
/// 互斥实例
/// </summary>
private Mutex m_mt = null;/// <summary>
/// 单实例设置(放在构造函数中即可)
/// </summary>
private void MutexRun()
{
bool bRun;
m_mt = new Mutex(true, "TestRun", out bRun);
if (!bRun)
{
IntPtr Hander = CommonGenerator.FindWindow(null, "窗体标题");
if (Hander != IntPtr.Zero)
{
CommonGenerator.SetForegroundWindow(Hander);
}
m_mt.Close();
Environment.Exit(1);
return;
}
}
Boolean createdNew = true;
System.Threading.Mutex m = new System.Threading.Mutex(true, Assembly.GetEntryAssembly().FullName, out createdNew);
if (createdNew)
{
RunApplication();
m.ReleaseMutex();
}