#c# #asp.net
#c# #asp.net
Вопрос:
В основном методе я использую этот поток для вызова функции отправки электронной почты.
protected void updateBtn_Click(object sender, EventArgs e)
{
Thread email = new Thread(delegate ()
{
sendmail(//send some string);
});
email.IsBackground = true;
email.Start();
}
Есть какой-то ответ.Запись в методе sendmail (), и когда я пытаюсь отладить, отображается ошибка
System.Web.HttpException: ‘Ответ недоступен в этом контексте.’
Это sendmail()
private void sendmail(//string input)
{
//do something about smtp
Response.Write("Test message");
}
Комментарии:
1. Где вы написали ответ. Писать? прямо сейчас я не вижу в вашем коде
2. В наши дни нет причин использовать
Thread
класс, если у вас нет конкретного варианта использования. отправка почты должна быть асинхронной, поскольку она выполняет ввод-вывод. все это должно просто использовать шаблон async и await3. @PurveshPatel Извините, теперь я отредактировал, чтобы добавить ответ. Запись.
Ответ №1:
Response
Объект связан с обработчиком событий кнопки и недоступен в новом потоке, который вы запускаете.
Обработчик событий завершается вскоре после запуска нового потока. Все, что записано в Response
, должно быть сделано до того, как этот обработчик вернется.
Ответ №2:
Я проверил ваш код, он работает отлично
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//GetData();
CheckThread();
}
}
private void CheckThread()
{
Thread email = new Thread(delegate ()
{
sendmail();
});
email.IsBackground = true;
email.Start();
}
private void sendmail()
{
Response.Write("Call this function!");
}