Я создал приложение, которое архивирует некоторые файлы и отправляет их по электронной почте.Имеется приблизительно 70 файлов (их общий размер составляет около 800 КБ).
Процесс zip замораживает мое приложение (но это нормально, потому что это занимает около секунды)
Проблема в процессе электронной почты,Во время отладки я обнаружил, что весь процесс подготовки электронной почты довольно быстрый, за исключением
smtp.Send (message)
, который полностью замораживает мое приложение: через 5 секундприложение все еще работает, но исчезает с панели задач, и даже после того, как электронное письмо отправлено, приложение продолжает не отвечать.
Функция отправки электронного письма:
public void SendMail(string FromGmailEmail, string GmailPassword, string ToEmail, string Subject, string Body, string[] AttachmentsPaths)
{
var fromAddress = new MailAddress(FromGmailEmail, "None");
var toAddress = new MailAddress(ToEmail, "None");
string fromPassword = GmailPassword;
string subject = Subject;
string body = Body;
var smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
var message = new MailMessage(fromAddress, toAddress);
message.Subject = subject;
message.Body = body;
try
{
for (int i = 0; i < AttachmentsPaths.Length; i++)
message.Attachments.Add(new Attachment(AttachmentsPaths[i]));
}
catch (FileNotFoundException)
{
}
smtp.Timeout = int.MaxValue;
smtp.Send(message);
}
Яоткрытие новой темы при отправке электронного письма.
public void OpenEmailThread(string FromGmailEmail, string GmailPassword, string ToEmail, string Subject, string Body, string[] AttachmentsPaths)
{
Thread thread = new Thread(() => SendMail(FromGmailEmail, GmailPassword, ToEmail, Subject, Body, AttachmentsPaths));
thread.Name = "EmailThread";
thread.Start();
}
Примечание для стороны: И для некоторых вывод говорит мне:
Первое случайное исключение типа 'System.IO.IOException'произошло в mscorlib.dll
в
smtp.Send (сообщение)
(но это наименьшая из моих проблем)
РЕДАКТИРОВАТЬ: Оказывается, я редактировал файл, когда он отправлял его.Я знал, что это произойдет, и поэтому я добавил переменную bool под названием «IsEmailing», чтобы заблокировать файл, когда я писал по электронной почте.Оказывается, файлы по-прежнему загружаются после "smtp.Send (message);".
Решение: заархивируйте вложения перед отправкой И ТОЛЬКО ПЕРЕД ОТПРАВКОЙ.таким образом, zip будет происходить только один раз, поэтому файл .zip нельзя изменить.