Это довольно широкий вопрос, но для хорошей работы с потоками в .NET 4 вы можете использовать Task .
Вы можете создать простое действие в контроллере:
[HttpPost]
public ActionResult ExcelReport(ReportModel model)
{
if(ModelState.IsValid)
{
ReportService reportCreator = new ReportService(); // or whatever class you use for that
Task.Factory.StartNew( () => reportCreator.GenerateReport(model));
//redirect somewhere or return a plain view with your message
return View("ConfirmationMessage");
}
return View();
}
Конечно, вы должны отправить его по почте в конце генерации в GenerateReport или пойти еще глубже и запустить другую задачу из метода GenerateReport.
Это делается на всей стороне сервера, если вы хотите иметьвсплывающее окно, вам нужно будет использовать, например, jQuery для перехвата отправки формы, передать модель функции по вашему выбору, где вы запускаете задачу и использовать для сообщения всплывающее окно из jQueryUI.Но это вопрос предпочтений.:)