Criando aplicações windows singleInstance
Aplicações singleInstance são aplicações que podem ser rodadas uma única vez, o usuário não pode abrir diversas instancias da aplicação, rodando várias vezes o executável.
O VB.NET, através dos recursos do MY, implementa facilmente aplicações singleInstance. Basta nas propriedades do projeto marcarmos a checkbox solicitando isso e ele gera o código para nós.
No C#, porém, não temos o recurso do My, consequentemente precisamos nós mesmos programar isso.
Para fazer isso devemos utilizar um Mutex. Um Mutex é um objeto do sistema operacional que permite criarmos uma sinalização entre nossas aplicações. Assim sendo, a primeira instância de nossa aplicação abre um Mutex e as instâncias seguintes, vendo que o Mutex já existe, não se iniciam.
Devemos fazer isso na Main. Veja:
static void Main()
{
Mutex mu = null;
try
{
mu = Mutex.OpenExisting("RUNMEONCE");
}
catch (WaitHandleCannotBeOpenedException)
{
}
if (mu == null)
{
mu = new Mutex(true, "RUNMEONCE");
}
else
{
mu.Close();
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}