利用Mutex实现应用程序的单实例运行open in new window

System.Threading.Mutex :同步基元,它只向一个线程授予对共享资源的独占访问权。[MSDN]

实现原理: 在程序启动时,请求一个互斥体,如果能获取对指定互斥的访问权,就继续运行程序,否则就退出程序。

测试代码:

class Test
{
    /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
        bool flag = false;
        System.Threading.Mutex mutex = new System.Threading.Mutex(true, "Test", out flag);
        //第一个参数:true--给调用线程赋予互斥体的初始所属权
        //第一个参数:互斥体的名称
        //第三个参数:返回值,如果调用线程已被授予互斥体的初始所属权,则返回true
        if (flag)
        {
            Console.Write("Running");
        }
        else
        {
            Console.Write("Another is Running");
            System.Threading.Thread.Sleep(5000);//线程挂起5秒钟
            Environment.Exit(1);//退出程序
        }
        Console.ReadLine();
    }
}

运行结果:

第一次运行,输出"Running"。
不关闭第一次运行的程序, 进行第二次运行,输出"Another is Running",五秒钟后,程序自动退出。

posted @ 2004-05-22 13:38 dudu 阅读(8362) 评论(13)

Contributors: FHL