Я работаю в приложении, которое отправляет почту с сервера. так как smtp.send(msg)
потребуется некоторое время для связи с сервером. я сделал блок кода отправки в отдельном потоке. Раньше он работал нормально, но после добавления элемента управления таймером timer1 (который выполнял некоторую логику кода). Отправка почты была прервана из-за следующей ошибки:
Невозможно оценить выражение, поскольку код оптимизирован или собственный фрейм находится на вершине стека вызовов
Threading приходит сюда..
void sendMail()
{
ThreadStart sendCreateMail = delegate() { Send(subject); };
Thread threadSendCreateMail = new Thread(sendCreateMail);
sendCreateMail.IsBackground = true;
sendCreateMail.Start();
timer1.Enabled = true;
}
Код net.mail приходит сюда....
protected void Send(string subject)
{
try
{
MailMessage mail = new MailMessage();
SmtpClient smtp = new SmtpClient("smtp.office365.com");
var credential = (System.Net.NetworkCredential)smtp.Credentials;
string Username = credential.UserName;
string password = credential.Password;
mail.From = new MailAddress(Username);
mail.To.Add(toMail);
mail.Subject = "subject";
mail.Body = "msg body";
mail.IsBodyHtml = true;
smtp.EnableSsl = true;
smtp.Credentials = new System.Net.NetworkCredential(Username, password);
smtp.Send(mail);
}
ОБНОВЛЕНИЕ
Задача sendMail работает и на других страницах. Здесь это всплывающее окно, так что блок timer1, о котором я уже говорил, выполняет функцию закрытия всплывающего окна. Там он останавливает выполнение потока. что я могу понять (например, response.end, response.redirect не могу угадать, что именно, это сторонний инструмент под названием telerik radwindow
!). но как это побороть.