Question

J'ai un flux de données provenant d'une source externe que je collecte actuellement dans un BackgroundWorker . Chaque fois qu'il reçoit un autre bloc de données, il les présente à une interface graphique à l'aide d'un appel ReportProgress () .

J'ai l'impression que la fonction ProgressChanged est simplement un mécanisme de synchronisation. Ainsi, lorsque mon thread de travail appelle cela, les deux threads sont verrouillés pendant que le thread d'interface graphique traite la modification. Donc, je pense que le problème est que tant que le thread d'arrière-plan met à jour l'interface graphique, il ne peut recevoir aucune donnée, ce qui signifie que nous perdons quelques paquets. Est-ce exact ou est-ce que mon paquet tombe plus susceptible de tomber ailleurs?

Si c'est la cause, ajouter un deuxième thread pour effectuer la mise à jour de l'interface graphique constituerait-il une solution raisonnable ou existe-t-il des moyens meilleurs / plus approfondis de résoudre ces problèmes que je devrais approfondir?

Toute pensée ou suggestion serait la bienvenue.

Était-ce utile?

La solution

Le thread de travail envoie simplement un message asynchrone au thread d'interface graphique, ce qui entraînera le déclenchement d'un événement dans l'interface graphique. Cela ne devrait pas arrêter votre fil d’arrière-plan. (Et cela ne devrait pas avoir d’importance. Votre programme d’interface graphique pourrait s’arrêter longtemps si l’utilisateur décidait de démarrer un autre programme, etc.)

Vous ne parlez pas du type de flux que vous utilisez. Donc, à moins que vous ne receviez des datagrammes UDP, qui ne sont de toute façon pas fiables, vous ne devriez pas perdre de données ici. Un flux est continu.

Autres conseils

Vous devrez peut-être créer un objet SynchronizationContext dans votre thread d'interface graphique pour pouvoir utiliser sa méthode Post pour envoyer des messages de manière asynchrone à partir de votre BackgroundWorker.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top