2010-11-13 11 views
2

Je travaille sur une application GUI multithread La modification de l'interface graphique dépend des données provenant d'un autre thread de communication.Modèle de conception pour une application GUI multithread

  1. Le fil de communication définit les données pour l'interface graphique et les drapeaux pour la modification des données.

  2. Actuellement, nous vérifions avec l'aide d'une minuterie dans le fil principal pour les drapeaux définis par le fil de réseau et sur l'interface graphique de changement de changement également.

  3. Mais il devient salissant en raison de la grande taille du projet.

Donc, s'il y a une modèle de conception pour ce genre de problèmes ...

Merci à l'avance ...

Répondre

3

je participais à une conférence donnée par Scott L. Bain auteur de Emergent Design où il décrit en utilisant le Mediator pattern pour un intermédiaire entre gui et la logique métier. Dans son exemple, ils ont pu échanger un gui régulier avec (paraphraser de la mémoire) une entrée en langage naturel pour les personnes handicapées, sans changer la logique métier. Quelque chose de similaire peut vous aider à synchroniser les données produites à partir de votre thread à votre gui, tout en séparant la responsabilité de vos classes.

2

Que diriez-vous de le rendre événementiel? La couche GUI s'abonne aux événements de la couche de données ou de communication et, lorsque l'événement est déclenché, elle sait se mettre à jour automatiquement. De cette façon, la couche GUI connaît la couche data/comms mais pas l'inverse. Btw, pas sûr de votre environnement, mais il faut faire attention à la mise à jour de l'interface graphique à partir du thread sur lequel l'événement est déclenché. Dans .NET par exemple, vous devrez utiliser Control.Invoke (http://msdn.microsoft.com/en-us/library/zyzhdc6b.aspx) pour mettre à jour l'interface graphique à partir d'un thread non-GUI.