J'utilise Visual C# .Net via Visual Studio 2008 Express et je lance un thread à partir d'une application de formulaires pour attendre les données entrantes en boucle. Ainsi, chaque boucle attend que les données soient disponibles, puis obtient les données et recommence à attendre.Visual C#, Thread enfant arrête le traitement sur le thread parent. Pourquoi?
La principale raison pour laquelle j'attends mes données dans un thread séparé est que mon formulaire permet toujours l'interaction pendant que l'autre reste là en attente de données.
Pour une raison quelconque, mon formulaire se verrouille pendant que mon autre thread est en attente.
Malheureusement, je suis obligé d'utiliser une fonction propriétaire pour acquérir mes données. Le traitement s'arrêtera littéralement à cette fonction jusqu'à ce que les données lui soient renvoyées (ce qui attend les entrées matérielles). Ainsi, un utilisateur peut cliquer en vain sur les options de menu sans effet, jusqu'à ce que le thread fils renvoie des données et que toutes les options de menu cliquées changent rapidement d'état et se verrouillent à nouveau. Donc, ma question est:
Pourquoi mon fils enfile-t-il ma forme? Is not est supposé être indépendant? Que puis-je faire pour forcer mon formulaire à continuer à fonctionner si ce thread enfant attend quelque chose?
Je fais actuellement mon fils comme ceci:
ControlThread = new Thread(new ThreadStart(Run));
ControlThread.Start();
Lorsque ma fonction Run est quelque chose comme ceci:
public void Run()
{
while (!StopEventHandle.WaitOne(0, true))
{
int data = WaitForData();
invoke(DelegatedResults);
}
}
Où DelegatedResults est une fonction sur ma forme qui met à jour des zones de texte en utilisant la données qui sont entrées.
Vous pouvez essayer d'utiliser la classe BackgroundWorker à la place pour éviter une gestion de thread plus complexe. –
La classe BackgroundWorker, tout en semblant beaucoup plus simple que ce que j'avais fait pour gérer mes threads, ne permettra toujours pas à mon thread principal de continuer si mon thread fils est en attente. –