Страницы

Поиск по вопросам

воскресенье, 16 февраля 2020 г.

Как закрыть файл после отправки его на почту?

#c_sharp


У меня есть программа, каждые 30 секунд она записывает свои действия в файл .txt.
В backgroundWorker каждые 30 мин этот файл отправляется мне на почту, но после отправки
при попытке записать данные в файл выходит ошибка "этот файл используется в другом потоке".
Пожалуйста помогите решить проблему.

Вот код отправки:

MailMessage mail = new MailMessage("От кого", "Кому","Заголовок", "Текст сообщения");
SmtpClient client = new SmtpClient("smtp.mail.ru");
client.Port = 587;
System.Net.Mail.Attachment data = new System.Net.Mail.Attachment(nameDoc); // nameDoc
- переменная содержащая путь к файлу
client.Credentials = new System.Net.NetworkCredential("логин", "пароль");
client.EnableSsl = true;
mail.Attachments.Add(data);
client.Send(mail);

    


Ответы

Ответ 1



Attachment реализует IDisposable, попробуйте явно его уничтожать: MailMessage mail = new MailMessage("От кого", "Кому","Заголовок", "Текст сообщения"); SmtpClient client = new SmtpClient("smtp.mail.ru"); client.Port = 587; client.Credentials = new System.Net.NetworkCredential("логин", "пароль"); client.EnableSsl = true; using (System.Net.Mail.Attachment data = new System.Net.Mail.Attachment(nameDoc)) { mail.Attachments.Add(data); client.Send(mail); } А лучше уничтожайте целиком MailMessage: SmtpClient client = new SmtpClient("smtp.mail.ru"); client.Port = 587; client.Credentials = new System.Net.NetworkCredential("логин", "пароль"); client.EnableSsl = true; using (var mail = new MailMessage("От кого", "Кому","Заголовок", "Текст сообщения")) { var data = new System.Net.Mail.Attachment(nameDoc)); mail.Attachments.Add(data); client.Send(mail); }

Комментариев нет:

Отправить комментарий