如何制作单例应用程序

时间:2010-06-07 11:18:12

标签: c#

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

我添加了互斥检查,但它导致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并导致我的应用程序崩溃..我经过彻底的测试,结果发现使用互斥导致了这个问题

2 个答案:

答案 0 :(得分:1)

互斥锁应该可以在64位系统上正常工作 请告诉我们您的代码。

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

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

答案 1 :(得分:1)

使用互斥是正确的方法,搜索进程表是错误的。如果互斥锁不适合您,则必须在代码中出现一些错误。你能发布有效的代码部分吗?