看一看的Mutex类。命名的模式为应用程序提供了一种相互发送信号的方式。
以下示例显示了两个控制台应用程序。该TestMutexLauncher应用程序启动TestMutex应用:
using System;
using System.Diagnostics;
using System.Threading;
namespace TestMutexLauncher
{
class Program
{
static void Main(string[] args)
{
var p = Process.Start("TestMutex");
Console.WriteLine("Waiting for other process to release the mutex.");
Thread.Sleep(1000); // maybe p.WaitForInputIdle is an alternative for WinForms/WPF
Mutex mutex = null;
for (int i = 0; i < 100; i++)
{
if (Mutex.TryOpenExisting("MyUniqueMutexName", out mutex))
break;
Thread.Sleep(100);
}
if (mutex != null)
{
try
{
mutex.WaitOne();
mutex.ReleaseMutex();
}
finally
{
mutex.Dispose();
}
}
}
}
}
启动器应用程序启动过程,并等待在另一个进程中创建一个互斥。如果它可以在指定的时间范围内获得互斥量的所有权,它将等待互斥量的所有权。之后,它释放并处置互斥体。
启动的应用程序的第一个任务是创建互斥锁,执行初始化操作,然后释放互斥锁。
using System;
using System.Threading;
namespace TestMutex
{
class Program
{
static void Main(string[] args)
{
using (var mutex = new Mutex(true, "MyUniqueMutexName"))
{
// Do something
for (int i = 0; i < 10000; i++)
Console.Write(".");
Console.WriteLine();
Console.WriteLine("Press enter...");
Console.ReadLine();
mutex.ReleaseMutex();
}
for (int i = 0; i < 10000; i++)
Console.Write(".");
Console.WriteLine();
Console.WriteLine("Press enter...");
Console.ReadLine();
}
}
}
你是如何从第一个启动第二个应用程序? – JotaBe