Ich habe eine Konsolenanwendung, die, wenn sie ausgeführt wird, E-Mails über googles SMTP-Client sendet.Wie kann ich wissen, ob aktive Threads vorhanden sind?
-Code dafür:
private void SendEmailThread(MailMessage message)
{
Thread thread = new Thread(() => _mailService.SendEmail(message));
thread.Start();
thread.Join();
}
Wie kann ich wissen, wenn alle Threads abgeschlossen sind?
Gibt es eine globale Eigenschaft, die auf ThreadsRunning = 0
gesetzt wird, wenn alle fertig sind?
Ich möchte eine Nachricht an die Konsole senden, wenn alle E-Mails gesendet wurden, und das ist getan, wenn ich keine Threads mehr habe.
Etwas wie:
if(allThreadsDone){
Console.WriteLine("All mails are sent");
}
Siehe diese Fragen: [Aussetzen und Benachrichtigen von Threads, wenn Arbeit zu tun ist] (http://stackoverflow.com/questions/210020/suspending-and-notifying-threads-when-there-is-work-to- do) und [C# entspricht Java's warte und benachrichtige?] (http://stackoverflow.com/questions/209281/c-sharp-equivalent-to-javes-wait-and-notify). Schauen Sie auch auf ['Task.Run'] (https://msdn.microsoft.com/en-us/library/system.threading.tasks.task.run.aspx), wenn Sie keinen dedizierten E-Mail-Absender-Thread möchten . – Romoku
Aus dem Aussehen ist Ihr Code im Wesentlichen die gleiche wie '_mailService.SendEmail (Nachricht);' weil Sie 'Join' verwenden, die auf den Thread wartet, um abzuschließen. – TheLethalCoder
Von MSDN: Blockiert den aufrufenden Thread, bis der Thread, der von dieser Instanz dargestellt wird, beendet wird, während das standardmäßige COM- und SendMessage-Pumpen fortgesetzt wird. – TheLethalCoder