Bugün Webkolog'da, sıkça karşılaşılan bir soruna pratik bir çözüm bulacağız: C# .NET Framework 4 ile geliştirdiğimiz bir uygulamanın aynı anda birden fazla kez açılmasını nasıl önleyebiliriz? Özellikle tekil bir uygulama çalıştırmak istediğimizde, kullanıcının yanlışlıkla veya bilerek aynı .exe dosyasına tekrar tıklaması durumunda yeni bir örnek açılmasını engellemek oldukça önemlidir. Bu durum, kaynak tüketimini azaltır ve uygulamanın tutarlı çalışmasını sağlar.
Uygulamayı Tekil
Çalıştırmak Neden Önemli?
Düşünün ki, bir not defteri veya bir sistem izleme aracı yazdınız. Bu tür uygulamaların genellikle tek bir örneğinin çalışması istenir. Birden fazla kopyasının açılması hem belleği gereksiz yere tüketebilir hem de kullanıcı deneyimini bozabilir. Örneğin, bir ayar dosyasını birden fazla kopya aynı anda düzenlemeye çalışırsa, veri bozulmaları yaşanabilir. İşte tam da bu noktada, Mutex sınıfı imdadımıza yetişiyor.
Mutex ile Tekil Uygulama
Kontrolü
Mutex (Mutual Exclusion), işletim sistemi seviyesinde
çalışan bir senkronizasyon nesnesidir. Adından da anlaşılacağı üzere, belirli
bir kaynağa aynı anda yalnızca bir iş parçacığının veya sürecin erişmesine izin
verir. Biz bu özelliğini, uygulamamızın bir örneğinin zaten çalışıp
çalışmadığını kontrol etmek için kullanacağız.
Microsoft Visual Studio 2010'da geliştirdiğimiz Windows Forms uygulamamızda, bu kontrolü Program.cs dosyamızın içine yerleştirmek en uygun ve etkili yoldur. Program.cs dosyası, uygulamanızın ilk çalışmaya başladığı yerdir ve burada yapacağımız kontrol, uygulamanın ana formunu dahi yüklemeden önce devreye girecektir.
Kod ve Açıklaması
Şimdi gelelim kod parçacığına. Program.cs dosyanızı
açın ve Main metodunuzun hemen başına aşağıdaki kodu ekleyin:
using System;
using System.Threading;
using System.Windows.Forms; // MessageBox için gerekli
namespace WebkologApp // Sizin namespace'iniz farklı olabilir
{
static class Program
{
///
Bu kodun ana mantığı şu şekilde:
- Mutex m = new Mutex(true, "Webkolog_TekilUygulamaMutex",
out AcikUygulamaVar);
- Burada bir Mutex nesnesi oluşturuyoruz.
- İlk parametre olan true, oluşturulan Mutex'in şu anki iş parçacığı
tarafından anında sahiplenilmesini sağlar.
- İkinci parametre "Webkolog_TekilUygulamaMutex" çok kritik!
Bu, bizim Mutex'imize verdiğimiz benzersiz bir isimdir. Aynı isimle başka
bir Mutex nesnesi oluşturulmaya çalışılırsa, bu isim zaten başka bir
yerde kullanıldığı için AcikUygulamaVar değişkeni false dönecektir. İşte
tekil kontrolü bu isimlendirme üzerinden yapıyoruz.
- out AcikUygulamaVar ise, Mutex'in yeni oluşturulup
oluşturulmadığını bize bildirir. Eğer true ise, Mutex yeni
oluşturulmuştur ve uygulama ilk kez açılıyordur. Eğer false ise, bu
isimde bir Mutex zaten vardır, yani uygulamanın bir kopyası zaten
çalışıyordur.
- if (!AcikUygulamaVar)
- Eğer AcikUygulamaVar false dönerse, yani bu isimde bir Mutex zaten
açıksa, kullanıcıya bir MessageBox ile uyarı gösterilir ve return; ile
uygulama hemen kapatılır.
- m.ReleaseMutex();
- Uygulama düzgün bir şekilde kapatıldığında, Mutex'i serbest
bırakmayı unutmamalıyız. Aksi takdirde, uygulama kapansa bile Mutex
kilitli kalabilir ve bir sonraki açılışta hata verebilir. Bu satırı
Application.Run metodundan sonra ekliyoruz ki, uygulama çalışmasını
tamamladıktan sonra Mutex serbest bırakılsın.
Bu basit ama etkili kod parçacığı sayesinde, uygulamanızın her zaman tek bir kopyasının çalıştığından emin olabilirsiniz. Özellikle sistem tepsisinde çalışan uygulamalar veya sürekli veri işleyen servis benzeri uygulamalar için bu yöntem vazgeçilmezdir.
Umarım bu makale, uygulamalarınızın tekil çalıştırma özelliğini nasıl kazandıracağınız konusunda sizlere yardımcı olmuştur. Kodlama yolculuğunuzda bu tür pratik bilgilerin çok değerli olduğunu unutmayın!
Webkolog'u takipte kalın!
Hepinize bol kodlu ve başarılı projeler dilerim!
0 yorum:
Yorum Gönder