Windows Form Uygulamasının, Aynı Anda Birden Fazla Çalışmasını Önlemek

Merhaba .NET dostu!

Bu sitenin takipçileri; yazının başlığına bakınca, “şişman adam iyice bunadı, bu konuyu daha önce yazmıştı!” diye tepki gösterebilir. Lütfen efendim… O kadar önyargılı olmayalım. Bu yazıyı da okuyun, sonra karar verirsiniz. Ne demek istediğimi birazdaha açayım isterseniz. Önceki makalede (Yazdığınız uygulamanın, aynı anda birden fazla çalıştırılmasını engellemek); aynı sorunu ele almış ve bunu çözmenin bir yolunu anlatmıştım. Şimdi yine aynı konuda, fakat bu kez daha başka bir açıdan yaklaşarak, daha sağlıklı bir çözüm getireceğim.

Dilerseniz, önce ilk yazımdaki çözümün, eksik bir noktasını ortaya koyalım. O yazımdaki amacım, uygulama eğer ikinci kez çalıştırıldıysa, çalışan ilk halini sistemden kaldırmak, kapatmaktı. Bunu da System.Diagnostics namespace’i altında bulunan Process sınıfının Kill metodunu kullanarak yapmıştım. İşte eksik nokta bu. Peki nasıl bir sorun yaratır bu eksiklik?

Kullanıcı tarafından bakalım. Kullanıcı masaüstünde kısayolu bulunan bir uygulamayı açtı. Bu uygulama üzerinde birkaç işlem yaptı. Sonra yanlışlıkla, aynı kısayola tekrar çift tıkladı. BUM! Üzerinde çalıştığı uygulama kapatıldı, yerine ikinci kez çalıştırılan uygulama açıldı. Soru şu; kullanıcı programcıya olan sinirini nasıl yansıtır? J

Peki bu eksiği kapatmanın yöntemi, bakış açısını değiştirmek. Yani “uygulama zaten açıksa, yeni bir tane açılamasın” demek gerekiyor. İşte bu bakış açısının koda yansımış hali:

 

 

Dikkat edeceğiniz gibi bu kod, Program.cs içinde bulunan Main() metoduna yazıldı. Bir hatırlatma daha yapalım, bu kodu denemek için, kodu yazdıktan sonra Debug etmeyin (F5 ile çalıştırmayın). Direk projenin .exe dosyasından test edin.

Kodla kalın…

8 thoughts on “Windows Form Uygulamasının, Aynı Anda Birden Fazla Çalışmasını Önlemek

  1. Hocam sizin bu örneğiniz de aynı programı farklı isimlerle istediğimiz adette çalıştırılabiliyor.. Eğer gerçekten bir adet çalışmasını istiyorsak o zaman Mutex sınıfını kullanmalıyız.. Bunu yapmak içinde program.cs ‘in içine aşağıdaki kodları yazmalıyız..

    {
    bool calisiyormu;
    Mutex mt = new Mutex(true, "birtanecalis", out calisiyormu);
    if (!calisiyormu)
    {
    MessageBox.Show("Zaten bir kopya çalışıyor", "Uyarı");
    return;
    }
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());

    }

  2. Bu sitenin takipçileri; yazının başlığına bakınca, "şişman adam iyice bunadı, bu konuyu daha önce yazmıştı!" diye tepki gösterebilir. Lütfen efendim… O kadar önyargılı olmayalım. Bu yazıyı da okuyun, sonra karar verirsiniz

    DOSTUM SÜPERSİN YA :)) Güzel anlatım teşekkürler

Leave a Reply