首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用互斥锁运行应用程序的单个实例

使用互斥锁运行应用程序的单个实例
EN

Stack Overflow用户
提问于 2009-05-04 11:49:39
回答 7查看 59K关注 0票数 30

为了只允许运行一个应用程序的单个实例,我使用了互斥。代码如下所示。这是正确的做法吗?代码中有什么缺陷吗?

当用户再次尝试打开应用程序时,如何显示已经运行的应用程序。目前(在下面的代码中),我只是显示一条消息,表明另一个实例已经在运行。

代码语言:javascript
复制
    static void Main(string[] args)
    {
        Mutex _mut = null;

        try
        {
            _mut = Mutex.OpenExisting(AppDomain.CurrentDomain.FriendlyName);
        }
        catch
        {
             //handler to be written
        }

        if (_mut == null)
        {
            _mut = new Mutex(false, AppDomain.CurrentDomain.FriendlyName);
        }
        else
        {
            _mut.Close();
            MessageBox.Show("Instance already running");

        }            
    }
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-05-04 12:03:39

我曾经这样做过一次,我希望它能有所帮助:

代码语言:javascript
复制
bool createdNew;

Mutex m = new Mutex(true, "myApp", out createdNew);

if (!createdNew)
{
    // myApp is already running...
    MessageBox.Show("myApp is already running!", "Multiple Instances");
    return;
}
票数 19
EN

Stack Overflow用户

发布于 2009-05-04 12:17:57

代码语言:javascript
复制
static void Main() 
{
  using(Mutex mutex = new Mutex(false, @"Global\" + appGuid))
  {
    if(!mutex.WaitOne(0, false))
    {
       MessageBox.Show("Instance already running");
       return;
    }

    GC.Collect();                
    Application.Run(new Form1());
  }
}

来源:http://odetocode.com/Blogs/scott/archive/2004/08/20/401.aspx

票数 9
EN

Stack Overflow用户

发布于 2012-12-27 15:14:03

我使用的是:

代码语言:javascript
复制
    private static Mutex _mutex;

    private static bool IsSingleInstance()
    {
        _mutex = new Mutex(false, _mutexName);

        // keep the mutex reference alive until the normal 
        //termination of the program
        GC.KeepAlive(_mutex);

        try
        {
            return _mutex.WaitOne(0, false);
        }
        catch (AbandonedMutexException)
        {
            // if one thread acquires a Mutex object 
            //that another thread has abandoned 
            //by exiting without releasing it

            _mutex.ReleaseMutex();
            return _mutex.WaitOne(0, false);
        }
    }


    public Form1()
    {
        if (!isSingleInstance())
        {
            MessageBox.Show("Instance already running");
            this.Close();
            return;
        }

        //program body here
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (_mutex != null)
        {
            _mutex.ReleaseMutex();
        }
    }    
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/819773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档