Только потому, что это немного расплывчато ... Я буду краток ...
Есть много способов сделать асинхронную или параллельную работу в c # /. Net и т. Д.
Самый быстрый способ сделать то, что вы хотите, это использовать фоновый рабочий поток, который позволит избежать блокировки вашего пользовательского интерфейса.
Подсказка с фоновыми рабочими потоками: вы не можете напрямую обновлять пользовательский интерфейс из них (привязка потоков и Marshalling)это просто то, с чем ты учишься иметь дело ...)
Еще одна вещь, которую стоит учесть ... если ты используешь стандартные вещи типа System.Net.Mail для отправки писем ... будь осторожен в том, как ты создаешь свойлогика.Если вы изолируете все это в каком-то методе и будете вызывать его снова и снова, то, вероятно, придется каждый раз разрывать и перестраивать соединение с почтовым сервером, и задержка, связанная с аутентификацией и т. Д., Все равно будет излишне замедлять процесс.По возможности отправляйте несколько электронных писем через одно открытое соединение на почтовый сервер.