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

· 1 dk okuma · C#.NET · Windows Application

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:

08.03

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…

Yorumlar (8)

  1. Tarık · arşiv

    wuuu.pretty good

    1. Murat · arşiv

      Hocam güzel bir paylaşım olmuş ben bir uygulama geliştiriyorum ve bunu düşünmemiştim 🙂

      1. Fatih · arşiv

        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());

        }

        1. turkayurkmez · arşiv

          Doğru söze ne denir?

          Teşekkürler Fatih.

          1. kablo tv · arşiv

            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

            1. web tasarım · arşiv

              Kod için çok teşekkürler. Bunu bayadır arıyordum işime yarıyacak 🙂

              1. web sitesi · arşiv

                tebrikler hocam

                1. Kaan · arşiv

                  Kesinlikle ilk makalede sorduğum sorunun yanıtını aldım.
                  Teşekkür ederim…