Programın ikinci kez açılmasını engellemek

by Alper KOCA 12. Eylül 2009 16:30

Yaptığım bir projede ağ ile veri alış verişi sağlamak için port dinliyorum ve program ikinci kez açıldığında hata veriyor ve program hatalıymış gibi gözüküyordu. İlk açılan programı sonradan kapattıklarında ise ikinci açılan program işlevini göremiyor ve program çalışmıyormuş gibi söyleniyordu ve bende sinir oluyordum tabiki :) En son sinirlendim ve programı ikinci kez açacakları zaman kibarca bir uyarı mesajı verdim.

Şimdi bunu nasıl yaptığımı inceleyelim.
Okulda işletim derslerinde anlatılan Mutex diye bir nesne vardı ve işime bukadar yarıyacağını hiç düşünmemiştim. Mutex ile multi-thread programlar kaynakların kullanımının hangi thread de olduğunu kontrol edebilir ve çakışmaları önleyebiliriz. Bende bundan faydalanarak kontrol yaptım ve programımı birdaha ikinci kez açmalarını engelledim.

using System;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication1
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            bool programyok;
            Mutex mtx = new Mutex(true, "Programim", out programyok);
            if (!programyok)
            {
                MessageBox.Show("Program zaten çalışıyor...");
                return;
            }
            Application.Run(new Form1());
            GC.KeepAlive(mtx);
        }
    }
}

Mutex sınıfının aldığı ilk parametre sahiplenmek için kullanılıyor. İkinci parametre mutex’in ismi onunla çağırıyorsunuz oluşturduğunuz mutex’i, üçüncü parametre ise mutexin başarılı olup olmadığını gösteren bool değer.

Kullanım bu şekilde ve çok basit. Beni büyük bir dertten kurtardı umarım sizin içinde çok faydalı olur.

Tags: ,

C#

Powered by BlogEngine.NET 1.6.1.0 - FunkyGrunge Theme by n3o Web Designers

 

Alper KOCA

Alper KOCA
Çukurova Üniversitesi Bilgisayar Mühendisi
3. Sınıf Öğrencisi
Microsoft Student Partner