Vordergrund- und Hintergrundthreads
Ein verwalteter Thread ist entweder ein Hintergrund- oder Vordergrundthread. Hintergrund- und Vordergrundthreads sind bis auf eine Ausnahme gleich: Durch einen Hintergrundthread wird die verwaltete Ausführungsumgebung nicht aufrecht erhalten. Sobald alle Vordergrundthreads in einem verwalteten Prozess (in dem die EXE-Datei eine verwaltete Assembly ist) gestoppt wurden, stoppt das System alle Hintergrundthreads und schaltet sich ab.
Hinweis |
---|
Wenn ein Hintergrundthread von der Laufzeit angehalten wird, da der Prozess beendet wird, wird keine Ausnahme im Thread ausgelöst.Wenn Threads jedoch angehalten werden, weil die Anwendungsdomäne von der AppDomain.Unload-Methode entladen wird, wird sowohl in Vordergrund- als auch in Hintergrundthreads eine ThreadAbortException-Ausnahme ausgelöst. |
Verwenden Sie die Thread.IsBackground-Eigenschaft, um festzustellen, ob es sich bei dem Thread um einen Hintergrund- oder Vordergrundthread handelt, oder um dessen Status zu ändern. Ein Thread kann jederzeit in einen Hintergrundthread geändert werden, indem seine IsBackground-Eigenschaft auf true festgelegt wird.
Wichtig |
---|
Der Vorder- oder Hintergrundstatus eines Threads hat keinen Einfluss auf das Ergebnis einer unbehandelten Ausnahme im Thread.In .NET Framework, Version 2.0, führt eine unbehandelte Ausnahme in Vorder- und Hintergrundthreads dazu, dass die Anwendung beendet wird.Weitere Informationen finden Sie unter Ausnahmen in verwalteten Threads. |
Bei Threads aus dem verwalteten Threadpool (Threads, deren IsThreadPoolThread-Eigenschaft auf true festgelegt ist) handelt es sich um Hintergrundthreads. Alle Threads, die von nicht verwaltetem Code in die verwaltete Ausführungsumgebung gelangen, werden als Hintergrundthreads markiert. Alle Threads, die durch Erstellen und Starten eines neuen Thread-Objekts generiert wurden, sind standardmäßig Vordergrundthreads.
Wenn Sie einen Thread zur Überwachung einer Aktivität, z. B. einer Socketverbindung, verwenden, legen Sie seine IsBackground-Eigenschaft auf true fest, damit die Beendigung des Prozesses nicht durch den Thread verhindert wird.