Criando uma aplicação de instância única
Para evitar que o usuário abra duas ou mais instâncias do seu programa, você pode usar a seguinte técnica
//Referencie o namespace System.Threading
using System.Threading;
//Classe Mutex, ela que identificará se seu programa já está aberto
Mutex m = null;
//String que usaremos para identificar o programa
const string NomeMutex = "MEUPROGRAMA";
try
{
//Tenta abrir o Mutex
m = Mutex.OpenExisting(NomeMutex);
}
catch(WaitHandleCannotBeOpenedException)
{
//Nao existe
}
if(m == null)
{
//Caso nao exista, ele cria um novo
m = new Mutex(true,NomeMutex);
}
else
{
//Se existir é porque seu programa já está aberto
m.Close();
Application.Exit();
}
Você só precisa ter cuidado ao escolher a string de identificação, pois se houver outro programa com a mesma identificação, você não vai conseguir abrir seu programa.