看一看的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