首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否在.NET中阻止给定应用程序的多个实例?

是否在.NET中阻止给定应用程序的多个实例?
EN

Stack Overflow用户
提问于 2008-09-18 16:08:53
回答 18查看 110.3K关注 0票数 137

在.NET中,防止应用程序的多个实例同时运行的最佳方式是什么?如果没有“最佳”技术,那么对于每种解决方案都需要考虑哪些注意事项?

EN

回答 18

Stack Overflow用户

回答已采纳

发布于 2008-09-18 16:38:20

使用互斥锁。上面的一个使用GetProcessByName的例子有很多注意事项。这里有一篇关于这个主题的好文章:

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

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

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

private static string appGuid = "c0a76b5a-12ab-45c5-b9d9-d693faa6e7b9";
票数 164
EN

Stack Overflow用户

发布于 2008-09-18 16:16:04

代码语言:javascript
运行
复制
if (Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Length > 1)
{
  AppLog.Write("Application XXXX already running. Only one instance of this application is allowed", AppLog.LogMessageType.Warn);
  return;
}
票数 25
EN

Stack Overflow用户

发布于 2008-09-18 18:26:19

下面是确保只有一个实例在运行所需的代码。这是使用命名互斥锁的方法。

代码语言:javascript
运行
复制
public class Program
{
    static System.Threading.Mutex singleton = new Mutex(true, "My App Name");

    static void Main(string[] args)
    {
        if (!singleton.WaitOne(TimeSpan.Zero, true))
        {
            //there is already another instance running!
            Application.Exit();
        }
    }
}
票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/93989

复制
相关文章

相似问题

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