Merhaba, yeni yılın ilk C# dersi ile karşınızdayım. Bu ders C# Programın İki Kere Açılmasını Engellemek hakkında olacak. Artık aklıma ekleyecek bir ders gelmediğinden bana gelen sorulardan dersler çıkartıyorum. Bu konu da bir soru olarak gelmişti bu yüzden ders olarak eklemek istedim.
C# Programın İki Kere Açılmasını Engellemek
Bazen kullanıcıların programı iki kere açmasını istemeyiz. Özellikle servis olarak yada servis gibi çalışan projelerimiz için geçerlidir. Üst üste defalarca açılıp sistemde kasma yapmasını yada tekrar tekrar açıldığı için aynı işlemlerin tekrar tekrar yapılıp mükerrer kayıtlar olmasını istemeyiz. Bu nedenle böyle bir işleme ihtiyaç duyarız.
Örneğin bir DB eşitleme servisi, sms gönderme servisi yada mail gönderme servisi olduğunu var sayalım. Arka arkaya 5 kere açılmış olsun. Bu durumda her proje aynı sorguları 5x çalıştıracağından SQL Server’e fazladan yük bindirmiş olacak. Aynı zamanda bir işlem 5 kere yapılacak. Yani bir sms göndermesini istiyoruz ama 5 servisin her biri bir sms gönderiyor. Bu yüzden aynı sms 5 kere gitmiş olacak. Aynı durum mail gönderme servisi içinde geçerli. Eşitleme servisi için ise mükerrer kayıtlar açılması sorunu yaşarsınız.
Bu işlem için gerekli kodlarımız çok kısa ve forma ilgili namespace ‘i eklemeden vereceğim. Yani namespace ‘i inline olarak ekleyeceğiz.
if(System.Diagnostics.Process.GetProcessesByName("ExeAdi").Lenght > 1) { MessageBox.Show("Program zaten açık."); Application.Exit(); }
Gördüğünüz gibi kodlarımız bu kadar kısadır.
GetProcessesByName metodu ile verdiğimiz exe ‘nin kaç kere açık olduğunu alıyoruz. Eğer bir tane varsa sorun yok. Exe’ye çift tıklayıp açmak istediğimizde zaten çalışan bir exe var ise ikinci defa açılmak üzere olan exe bir uyarı verecek ve kapanacak.
Bu yazımızında sonuna geldik dostlar.
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.
Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz…
Sağlıcakla ve takipte kalın.
Teşekkürler fakat ben wpf de kullanmak istediğimde bu kodu nereye yazmam gerekiyor?
Program.cs veya AnaForm(ilk açılan form) ‘un load eventi içerisine yazabilirsiniz. Ben Program.cs içerisine yazılmasını tavsiye ederim.
Daha önce bir kaç kere WPF ile çalışmıştım ve kodlarda biraz değişiklikler vardı. Bu yüzden tam olarak bende bilemiyorum.
Merhaba hocam, MDI aracıyla kullanılan formların arka arkaya açılmasını engellemek amacıyla araştırırken size denk geldim, ve bu sayfada yazılanlar da çok önemli, fakat acemiliğime verin sormak istediğim şey, bu kodları programın neresine ekleyeceğiz onu anlayamadım? Saygılar sevgiler.
Merhaba,
Nerede kontrol etmek istersen oraya ekleyebilirsin. Ancak bir programın iki kere açılmasını engelleme amacı güttüğümüz düşünülürse ekleyebileceğimiz iki nokta kalıyor.
İlk olarak, Program.cs içerisinde ekleyebilirsiniz.
İkinci olarak, açılan ilk formumuzun load eventinde (en başta olmak şartı ile) yani ana formunuza ekleyebilirsiniz.
Tavsiyem Program.Cs içerisinde eklenmesidir. Bir programa çalıştırılma istediği gönderildiği anda program bu noktadan çalışmaya başlar. Bu yüzden daha program ekrana gelmeden kontrol edilmiş olur.