私は、実行中にgoogles 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- do)と[C#はJavaのwaitとnotifyに相当しますか?](http://stackoverflow.com/questions/209281/c-sharp-equivalent-to-javas-wait-and-notify)専用の電子メール送信者スレッドを必要としない場合は、['Task.Run'](https://msdn.microsoft.com/en-us/library/system.threading.tasks.task.run.aspx)も参照してください。 – Romoku
あなたのコードは、完了するためにスレッドを待つ 'Join'を使うので、あなたのコードは' _mailService.SendEmail(message);と本質的に同じです。 – TheLethalCoder
MSDNから:このインスタンスが表すスレッドが終了するまで、呼び出し元のスレッドをブロックし、標準COMおよびSendMessageのポンピングを続行します。 – TheLethalCoder