我有一个非托管应用程序,它在运行时打开我的托管应用程序。 - 每次执行非托管应用程序时,它都会打开我的应用程序的新实例。
我必须以某种方式做这种情况:
- 第一次执行非托管应用程序时,我的托管应用程序应运行正常,但如果用户再次尝试打开非托管应用程序,那些托管实例应处于“待机”模式,如果第一次托管当前正在运行的应用程序已关闭,其中一个备用实例应该“恢复”。
到目前为止,我应该使用互斥锁:
public Form1()
{
InitializeComponent();
if (!IsSingleInstance())
{
this.Close();
return;
}
}
private static Mutex _mutex;
private static bool IsSingleInstance()
{
_mutex = new Mutex(false, "MyApp");
GC.KeepAlive(_mutex);
try
{
return _mutex.WaitOne(0, false);
}
catch (AbandonedMutexException)
{
_mutex.ReleaseMutex();
return _mutex.WaitOne(0, false);
}
}
protected override void OnClosing(CancelEventArgs e)
{
if (_mutex != null)
{
_mutex.ReleaseMutex();
}
}
但是当然,代码只会检查另一个是否正在运行,如果它正在运行......那么它将关闭它。
我该怎么办?
谢谢,
答案 0 :(得分:2)
我宁愿把锁放在Program.cs中的Main。
static void Main()
{
Mutex mutex = new Mutex(false, "MyApp");
if (mutex.WaitOne())
{
try
{
Application.Run(new Form1());
}
finally
{
mutex.ReleaseMutex();
}
}
}