using System;
using System.Threading;
namespace Receta.CSharp.R0417
{
public class UnicaInstanciaAplicacion
{
public static void Main()
{
// Valor centinela (o bandera) para indicar si esta
// aplicación ya cuenta con una instancia:
bool appEnEjecucion;
// Mutex para tomar el control de la ejecución de esta
// aplicación por una única instancia:
using (Mutex mutex = new Mutex(true, "UnicaInstancia", out appEnEjecucion))
{
// Determina si esta aplicación posee el control de ejecución:
if (appEnEjecucion)
{
Console.WriteLine("\nÚnica instancia de `UnicaInstancia` en ejecución. " +
"\n\tPara finalizarla debe presionar la tecla Enter.");
Console.ReadLine();
// Libera la ejecución de esta instancia:
mutex.ReleaseMutex();
}
else // La aplicación se haya en ejecución,
// el intento de esta nueva terminará por finalizar:
{
Console.WriteLine("\nOtra instancia de la aplicación está en ejecución." +
"Esta instancia finalizará.");
}
}
// A espera de continuar:
Console.WriteLine("\nEl método `Main` ha finalizado. Presione Enter para continuar.");
Console.ReadLine();
}
}
}