2010-06-09 4 views
3

J'ai un certain nombre de contrôles Windows Forms qui sont utilisés pour interagir avec mes objets de programme. Actuellement, ils s'abonnent à un événement "Updated" sur l'objet et mettent à jour manuellement les valeurs si nécessaire. Je voudrais remplacer tous (ou autant que possible) de ce code standard en utilisant la liaison de données.Problèmes d'interconnexion avec la liaison de données .NET

Le problème que je rencontre est que l'état de l'objet peut être modifié par n'importe lequel de plusieurs threads différents à tout moment. Actuellement, j'utilise Invoke() pour gérer cela, ce qui fonctionne bien, mais quand je passe à la liaison de données, je suis submergé par des exceptions illégales de contrôle de threads. Y a-t-il une méthode préférée pour gérer cela gracieusement en utilisant la liaison de données, ou est-ce que je préfère laisser les choses telles qu'elles sont maintenant?

Merci!

+0

Pouvez-vous montrer votre avant et après le code. – ChrisF

Répondre

3

Si vous associez vos contrôles aux sources de données mises à jour à partir du thread sous-jacent, vous devrez déplacer le code qui effectue la mise à jour vers le thread UI via un appel à Invoke.

Ou, si vous voulez, vous pouvez obtenir une mise en œuvre ISynchronizeInvoke (ou un SynchronizationContext) et ont tout le feu des événements sur le thread d'interface utilisateur. Bien sûr, cela peut provoquer des problèmes inattendus avec votre code, car vous n'avez pas déclenché les événements sur le thread de l'interface utilisateur en premier lieu.

+0

+1 pour l'utilisation d'un 'SynchronizationContext' - comme vous le mentionnez, cela peut identifier des problèmes inconnus, mais le nettoyage des erreurs de threading est rarement une mauvaise idée – STW

Questions connexes