2009-08-25 5 views
9

Quelle est la différence entre un fond et un fil de premier plan?En CLR, quelle est la différence entre un thread de fond et de premier plan?

+0

Clarification: C# n'a pas de concept de fil de fond et de premier plan. Les distinctions que certains scénarios font à propos d'un thread sont effectuées au niveau CLR/COM. – JaredPar

+5

C# n'a pas non plus le concept de girafe, mais vous pouvez créer une classe avec une propriété appelée girafe. IsBackground est une propriété d'un objet dans le framework. Rappelez-vous, C# _the language_ n'est pas le framework .NET. C'est juste un langage de programmation. –

Répondre

20

De MSDN:

fils d'arrière-plan sont identiques à fils de premier plan à une exception près: un fil d'arrière-plan ne tient pas l'environnement d'exécution géré en cours d'exécution.

+0

Vous voulez dire qu'il ne peut pas empêcher un processus en cours de se terminer ... – Guffa

+0

@Guffa: Je ne comprends pas. Vous êtes ergoter sur une interprétation de la documentation MSDN? – Amy

+0

N'a-t-il pas aussi une priorité de commutation de contexte inférieure? –

15

Voir this page:

  • fils de premier plan ont la capacité d'empêcher l'application actuelle de mettre fin. Le CLR ne fermera pas une application (c'est-à-dire déchargera l'AppDomain d'hébergement) tant que tous les threads de premier plan ne seront pas terminés. Les threads d'arrière-plan (parfois appelés threads daemon) sont considérés par le CLR comme des chemins d'exécution non récupérables qui peuvent être ignorés à tout moment (même s'ils travaillent actuellement sur une certaine unité de travail). Ainsi, si tous les threads de premier plan sont terminés, tous les threads d'arrière-plan sont automatiquement supprimés lorsque le domaine d'application est déchargé.

+0

quand les gens devraient utiliser le fil de fond ..... donner un bon exemple. – Mou

4

Par défaut, les fils sont des fils de premier plan, ce qui signifie qu'ils gardent l'application en vie aussi longtemps que l'un d'eux est en cours d'exécution. C# prend également en charge les threads d'arrière-plan, qui ne maintiennent pas l'application en veille - se terminant immédiatement une fois que tous les threads de premier plan sont terminés.

0

Si l'un des fils de premier plan ou d'arrière-plan se termine, l'application meurt immédiatement. Il est possible de changer le fil de premier plan en arrière-plan et vice versa à tout moment pendant la durée de vie de l'application. CLR crée deux types de threads pour mieux prendre en charge AppDomain. CLR fermera de force les threads d'arrière-plan en cours d'exécution si le thread de premier plan se termine. Tous les threads créés par le code natif qui entrent dans l'environnement d'exécution managé sont marqués en tant que threads d'arrière-plan.

Questions connexes