Bir uygulamayı aynı anda birden fazla çalıştırmamak

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.

Bir uygulamayı aynı anda birden fazla çalıştırmamak” üzerine bir düşünce

  1. Furkan

    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 🙂

    Cevapla

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Time limit is exhausted. Please reload CAPTCHA.