【问题标题】:how to make application singleton如何使应用程序单例
【发布时间】:2010-06-07 11:18:12
【问题描述】:

我想确保只有一个应用程序实例运行...

我添加了互斥检查,但它在 64 位系统中导致问题。第二种方法是搜索进程表。重命名应用程序可以轻松击败此检查。请告诉我如何确保只有一个应用程序实例运行。

以下代码用于互斥锁

bool createdNew = true;
using (Mutex mutex = new Mutex(true, "MyApplicationName", out createdNew))
{
if (createdNew)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}

这个问题在 XP 64 位上 2 或 3 分钟后它会生成 StackOverflowExcpetion 并导致我的应用程序崩溃。我彻底测试并得出结果是使用互斥锁导致了这个问题

【问题讨论】:

标签: c#


【解决方案1】:

互斥锁应该在 64 位系统上正常工作。
请向我们展示您的代码。

或者,您可以使用 Microsoft.VisualBasic.dll(可在 C# 中使用)中的 WindowsFormsApplicationBase class,它已经为您实现了这一点。

要使用它,请将IsSingleInstance property 设置为true,将MainForm 属性设置为您的表单,然后调用Run

【讨论】:

    【解决方案2】:

    互斥锁的使用是正确的,查找进程表是错误的。如果互斥锁不适合您,您的代码中一定有一些错误。你能发布有效的代码部分吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多