我有一個控制檯應用程序,它運行時通過谷歌smtp客戶端發送電子郵件。如何知道是否有活動的線程?
代碼如下:
private void SendEmailThread(MailMessage message)
{
Thread thread = new Thread(() => _mailService.SendEmail(message));
thread.Start();
thread.Join();
}
我怎麼知道,當所有線程都完成了?
當全部完成後,是否有一個全局屬性設置爲ThreadsRunning = 0
?
我想在所有電子郵件發送完畢並且沒有更多線程時完成消息發送到控制檯。
喜歡的東西:
if(allThreadsDone){
Console.WriteLine("All mails are sent");
}
請參閱以下問題:[掛起並通知線程有工作要做時](http://stackoverflow.com/questions/210020/suspending-and-notifying-threads-when-there-is-work-to-做)和[C#相當於Java的等待和通知?](http://stackoverflow.com/questions/209281/c-sharp-equivalent-to-javas-wait-and-notify)。如果您不想要專用的電子郵件發件人線程,請查看['Task.Run'](https://msdn.microsoft.com/zh-cn/library/system.threading.tasks.task.run.aspx) 。 – Romoku
從它的外觀來看,你的代碼與'_mailService.SendEmail(message);'基本相同,因爲你使用'Join'來等待線程完成。 – TheLethalCoder
來自MSDN:阻止調用線程,直到此實例表示的線程終止,同時繼續執行標準COM和SendMessage抽取。 – TheLethalCoder