C# Windows Form Hata Geri Bildirimi

Eyyoo eyyoo herkese selamlar….

Satışa sunduğumuz program bazen bilinmedik sebeplerden dolayı kendini kapatabilir veya diğer sebeplerden dolayı sorunlar çıkartabilir. Bu ve buna benzer durumlarda müşterinin bilgisayarına bağlanıp kontrol etmek biraz profesyonellik dışı olduğu için müşterinin aldığı hatayı otomatik olarak bize mail attırabilir veya hata dosyasını kaydettirebiliriz. Nasıl mı? Buuuyyrunnnn;

İlk önce Program.cs ‘de ki Main classına bir hata yakalayıcısı ekliyorum.

Application.ThreadException += new ThreadExceptionEventHandler(ErrorThread);


static void Main()
{
     Application.EnableVisualStyles();
     Application.SetCompatibleTextRenderingDefault(false);
     Application.ThreadException += new ThreadExceptionEventHandler(ErrorThread);
     Application.Run(new frmLogin());
}

Şimdi hata durumunda tetiklenecek olan ErrorThread eventini oluşturuyorum;


private static void ErrorThread(object sender, ThreadExceptionEventArgs e)
{
    File.AppendAllText(Application.StartupPath + "\\error.txt",
        "\nHata Zamanı:" + DateTime.Now +
        "\nHata Nedeni:" + e.Exception.Message);
}

Hatanın ne olduğunu anlayabilmem için ThreadExceptionEventArgs içinde bulunan Exception.Message ifadesini hata nedeni olarak gösteriyorum…

Şimdi programımız olası bir hata durumunda .exe‘nin bulunduğu yere error.txt diye bir metin belgesi oluşturup dakika dakika kaydettiğini görebilirsiniz 🙂

Peki.. hatayı mail olarak göndermek istiyorsak ne yapmalıyız diyorsanız çözümü çok basit.. hemen projeme sendMail adında bir class açıyorum..


public static void Process(string _hataNedeni)
{
        SmtpClient sc = new SmtpClient();
        sc.Port = 587;
        sc.Host = "smtp.gmail.com";
        sc.EnableSsl = true;

        sc.Credentials = new NetworkCredential("eposta@gmail.com", "gmail_sifre");

        MailMessage mail = new MailMessage();

        mail.From = new MailAddress("eposta@gmail.com", "Ekranda Görünecek İsim");

        mail.To.Add("alici1@mail.com"); 

        mail.Subject = "Programda hata oluştu!";
        mail.IsBodyHtml = true;
        mail.Body = "\nHata Zamanı:" + DateTime.Now +
                  "\nHata Nedeni:" + _hataNedeni; 

        sc.Send(mail);
}

Bu sefer metin belgesi kodumu siliyorum ve mail göndermeyi tetiklettiriyorum.


private static void ErrorThread(object sender, ThreadExceptionEventArgs e)
{
     sendMail.Process(e.Exception.Message);
}

Programı hataya düşürdüğüm zaman gördüğünüz gibi otomatik olarak mail hesabıma düştü 🙂

Bu konumuzda bu kadar eğer projelerinizde neler olup bittiğini öğrenmek istiyorsanız bu kısa yolu kullanarak öğrenebilirsiniz.
Herkese bol mantıklı kodlamalar 🙂

Leave a Comment