8
votes

Comment puis-je accéder au fil parent d'un fil enfant ou d'un autre fil?

Dupliqué possible:
.net y a-t-il un moyen d'obtenir le parent ID de thread?

Y a-t-il une relation entre les threads dans .NET? J'ai besoin d'urgence d'obtenir le fil parent du thread et il n'y a aucun moyen de transmettre cette information. Y a-t-il un moyen d'obtenir le fil parent dans .NET ou à l'aide de l'API Win32?

Y a-t-il un moyen d'obtenir le fil parent de tout autre thread?


5 commentaires

Comment définiriez-vous "le fil parent"? Dans quel type d'environnement fonctionnent-tu? Quel est le problème que vous essayez de résoudre?


Nous avons besoin de plus d'informations sur ce que vous essayez de réaliser pour pouvoir vous donner la réponse que vous recherchez.


Et vous devriez accepter que les gens vont demander "Pourquoi avez-vous besoin de cela?" Trop de questions ici sont de la forme "Comment puis-je arriver à Mars sans utiliser de vaisseau spatial?" Nous allons vouloir contenter de déterminer ce que vous avez vraiment besoin / envie.


Comme vous n'êtes pas totalement sûr de sa possible, je le pose de toute façon. Qu'essayez-vous de faire? Éclairez-nous


ProTip: Dans la programmation, s'il n'y a pas de chemin facile à faire quelque chose *, c'est généralement un indice que ce que vous essayez de faire est faux. (* Pour le bénéfice des Nitpickers: cela ne comprend pas, bien sûr, des choses difficiles à faire sur leur visage, telles que la conversion d'un document HTML en PDF)


5 Réponses :


-2
votes

Utilisez invoquée pour effectuer une certaine opération dans le fil principal.


2 commentaires

... Comment cela est-il même pertinent à distance de la question?


Ce serait lorsque le parent est la programmation des winforms et de faire des appels asynchronisés. Mais encore une fois, c'est un tout un saut.



10
votes

.NET n'enregistre pas les relations parent-enfant entre les threads. Vous devrez suivre ces données par vous-même, en faisant passer le fil parent à l'enfant sur la création.

Cela dit, je ne peux pas imaginer pourquoi vous auriez besoin de cela. N'est pas rejoindre ing du parent ou quelque chose de bien assez bon?

Je peux comprendre que vous pourriez être frustré par des questions telles que "qu'est-ce que tu essayes de faire, de toute façon?" - Mais souvent si vous nous laissez savoir quel est votre véritable objectif, nous pourrons peut-être trouver une meilleure façon de penser. :)


1 commentaires

Je suis en train d'utiliser pour arrêter "un articleControl est incompatible avec sa source d'articles"



4
votes

dans Win32, les threads n'ont pas de filetage parent. Les fils sont tous appartenant au processus.


0 commentaires

3
votes

Les threads ne sont pas intrinsèquement ont une relation parent / enfant sur la framework .NET. Cela est dû au fait que, dans Win32, tous les threads appartiennent au processus.

Vous pouvez imposer cette relation vous-même, en créant une classe wrapper autour de vos discussions. Cependant, avec une telle information, je ne peux pas recommander une solution.


0 commentaires

1
votes

Il n'y a pas de relation entre les threads dans .NET. Cependant, il existe une relation parent-enfant dans la tâche Task / / , qui sont, à bien des égards, une meilleure approche de la concurrence que d'utiliser directement Fils.

qui étant dit ...

J'ai de toute urgence le fil parent du fil actuel et il n'y a aucun moyen de remettre cette information.

Le moyen principal de "main désactiver" les informations sur un thread serait d'implémenter un synchronisationContext . Ceci est typiquement fait par des cadres d'interface utilisateur afin d'implémenter isynchronizeInvoke sur des objets dans ce fil (c.-à-d.: contrôle.invoke ). Ce n'est pas quelque chose généralement fait manuellement et nécessite un fil très personnalisé qui maintient sa propre pompe de messagerie ou une file d'attente de processus qui est continuellement traitée.

Je recommanderais d'envisager de changer cela à un scénario de producteur / de consommateur, et à avoir votre "enfant" Sondage de thread pour de nouveaux articles de traitement. Cela élimine tout besoin de savoir sur les "parents" - puisqu'un thread peut ajouter à la file d'attente de traitement. La classe BlockingCollection est idéale pour ce scénario.


1 commentaires

Merci, je suis vraiment conscient de cela tout sauf que mon problème est lié à des threads que je creuse dans une infrastructure héritée de notre système. Je n'ai pas besoin de synchroniser les threads, je dois déterminer l'assemblage qui est en chaîne d'invocation directe / indirecte vers le thread de courant et qui est compromis si le fil qui provient de la tâche crée un fil de travail. Simplement, il n'y a aucune aide pour moi.Merci pour votre réponse.