J'essaie de désactiver des parties de l'interface utilisateur dans une application .NET basée sur l'interrogation effectuée sur un thread d'arrière-plan. Le thread d'arrière-plan vérifie si la connexion de base de données globale utilisée par l'application est toujours ouverte et opérationnelle. Ce que je dois faire, et que je préférerais faire sans interroger sur le thread de l'interface utilisateur, est d'ajouter un gestionnaire d'événements qui peut être levé par le thread d'arrière-plan si l'état de la connexion change. De cette façon, n'importe quel formulaire peut avoir un gestionnaire qui désactivera les parties de l'interface utilisateur qui nécessitent la connexion pour fonctionner. Tentative d'utilisation d'une déclaration d'événement rectiligne dans la classe contenant le sous-thread et augmentation de l'événement dans le thread d'arrière-plan entraînant des erreurs d'exécution croisées concernant l'accès aux contrôles d'interface utilisateur à partir d'autres threads.Délégués multithread/événements
De toute évidence, il existe une façon correcte de le faire, mais nous avons une expérience limitée avec les événements (applications à fil unique principalement), et presque aucun avec les délégués. J'ai lu la documentation et les exemples pour les délégués, et cela semble être plus proche de ce dont nous avons besoin, mais je ne sais pas comment le faire fonctionner dans ce cas.
L'application est écrite principalement dans VB.NET, mais un exemple ou une aide en C# est également bien.
Dans dotNET, vous ne devriez pas avoir une connexion globale ouverte en permanence. Lisez sur ConnectionPooling. http://stackoverflow.com/questions/2715714/ –
@Henk Holterman: Vous ne pouvez pas faire cette déclaration si vous ne connaissez pas ses circonstances. En outre, il n'est pas recommandé avec les fournisseurs que Microsoft inclut dans le cadre. – AMissico
@AMissico: En utilisant ma technique ci-dessous, ça n'a pas d'importance (ça marche aussi bien pour les deux ...) –