Bir .NET uygulamasının aynı anda sadece bir örneğini(single instance) çalıştırmak için birçok yöntem kullanılır. Burada bu yöntemlerden en çok kullanılan ve en hızlı olan mutex metodunu kullanımını örneklendireceğiz. Mutex(Mutual Exclusion) fonksiyonu, belli kaynakların yalnızca bir thread tarafından kullanılmasını sağlayan böylece processlerin birbirini engelleme sorununu ortadan kaldıran threading işleminde önemli rol oynayan bir işletim sistemi nesnesidir. Bir mutex’i, programların bir t zamanında sadece bir kere çalışmasını sağlamak amacıyla geliştirilmiş senkronizasyon tabanlı kilit yapısı olarak düşünebiliriz.
.NET Framework’te Mutex sınıfı, System.Threading kütüphanesi altında bulunmaktadır. Overload edilmiş bu sınıfın constructörü, en çok 3 parametreli haliyle kullanılır.
public Mutex(bool initiallyOwned, string name, out bool createdNew);
İlk parametre bool türünde olup bu mutexti sahiplenmek için kullanılır. İkinci parametrede, bu mutex’i tekilleştirmek için bir isim verilir. Üçüncü parametre, mutex’in başarılı ve başarısız sonucunu bildiren değeri tutmak için kullanılır.
using System;//STAThread using System.Windows.Forms;//MessageBox,Application using System.Threading;//Mutex namespace WindowsApplication1 { static class Program { [STAThread] static void Main() { bool IlkOrnek; //Bir mutex nesnesi oluşturalım. Mutex Mtx = new Mutex(true, "MyOrnekMutex", out IlkOrnek); if (!IlkOrnek) { MessageBox.Show("Bu program, zaten çalışıyor."); return; } Application.Run(new Form1()); GC.KeepAlive(Mtx);//Nesneyi kaldıralım. }//Main }//Program }//WindowsApplication1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim IlkOrnek As Boolean 'Bir mutex nesnesi oluşturalım. Dim Mtx As Mutex = New Mutex(True, "MyOrnekMutex", IlkOrnek) If (Not IlkOrnek) Then MessageBox.Show("Bu program, zaten çalışıyor.") Application.Exit() End If GC.KeepAlive(Mtx) 'Nesneyi kaldıralım. End Sub 'Form1_Load
Bu yöntem dışında System.Diagnostics.Process sınıfı kullanılarak makine üzerinde çalışan process tablosunda arama yapılarak ta bir program çalışırken tekrar çalıştırılması engellenebilir.
Hocam hayırlı günler kodlar çalışıyor eyvallah fakat benim ayrı bir sıkıntım var çalışan uygulamayı aktif hale nasıl getiririm messagebox yerine ön plana getirsin uygulamayı yapmak mümkündür fakat nasıl 🙂