Recently I was tasked to develop an application to keep track the outgoing items from the warehouse. Since it was style like a POS machine, I need to limit the instance of Windows Form application to only one.
To do this we’re going to need a “locking” mechanism. So before launching the Form, we need to check whether the lock is ON or OFF. We can use Mutex object as the lock.
public Mutex( bool initiallyOwned, string name )
- initiallyOwned
- Type: System.Boolean
true to give the calling thread initial ownership of the named system mutex if the named system mutex is created as a result of this call; otherwise, false.
- name
- Type: System.String
The name of the Mutex. If the value is null, the Mutex is unnamed.
To ensure the unique-ness of Mutex’s name, I used GUID as name (in Visual Studio, Tools -> Create GUID)
This is the final code:
using System; using System.Threading; using System.Windows.Forms; namespace MyPOS { static class Program { static Mutex mutex = new Mutex(true, "{37D26ECE-1F4F-42BC-9C23-11A9DAA8DCCA}"); [STAThread] static void Main() { //Grab the lock if (mutex.WaitOne(TimeSpan.Zero, true)) Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); //when the application is finished, release the lock mutex.ReleaseMutex(); } else { //Lock is already used MessageBox.Show("Only one instance allowed"); } } } }
I hope it helps, cheers!
loading...
About Hardono
Incoming Search
.net, c#, windows