Quante volte è successo di dover aspettare il caricamento di un'applicazione dopo il click sulla sua icona? A questo punto l'utente normale pensa che il sistema operativo si è dimenticato di lui e risolve il problema ricliccando più volte sull'icona. Conseguenza:la taskbar piena di bottoni della stessa applicazione.
Con poche righe di codice potremo divertirci a cliccare l'icona quante volte vogliamo caricando solamente una istanza dell'applicazione.
Basterà creare un oggetto Mutex del namespace System.Threading nel Main dell'applicazione. La classe Mutex gestisce la mutua esclusione tra processi. Quando più Thread hanno necessità di accedere nello stesso momento a una stessa risorsa condivisa, la classe Mutex garantisce l'accesso alla risorsa a un solo Thread alla volta.
Mutex mutex = new Mutex(false, "NOME_MUTEX");
if(mutex.WaitOne(1,false) == false)
return;
Il metodo WaitOne mette il processo in attesa di un segnale per accedere alla oggetto mutex creato. Se restituisce true vuol dire che il segnale è stato ricevuto e può proseguire l'esecuzione del codice dell'applicazione, in caso contrario il metodo restituisce false. La prima istanza dell'applicazione esegue il metodo WaitOne ed essendo il primo a occupare il Mutex di nome "NOME_MUTEX" riceve true e continua l'esecuzione. Le successive istanze dell'applicazione restituiranno false e usciranno dal main finendo l'esecuzione.