2008-10-22 6 views
7

Je crée une DLL C#, qui va être utilisée par d'autres développeurs dans WinForms. Pour certaines raisons, je veux détecter, si les méthodes de cette bibliothèque, sont appelées du thread principal (GUI) et avertir le développeur qu'il a fait une telle chose (c'est-à-dire dans le fichier journal). Existe-t-il un moyen raisonnable de détecter la méthode d'appel du thread principal? Rappelez-vous que je n'ai pas accès à l'application WinForm.Détection de l'exécution dans Main Thread dans la bibliothèque C#

Répondre

17

Une solution simple dans ce cas consiste à déclarer un contrôle statique dans l'assembly de bibliothèque créé sur le thread principal de l'interface utilisateur. Si vous voulez détecter si la bibliothèque est appelée à partir du thread principal, puis utilisez les éléments suivants

if (MyLibraryControl.InvokeRequired) 
    //do your thing here 
+1

Ceci devrait être marqué comme la bonne réponse à la question. –

2

L'option la plus simple (si vous avez une forme/contrôle à portée de main) est de vérifier InvokeRequired. En l'absence de cela, vous pouvez essayer d'utiliser SynchronizationContext pour simuler un envoi ou un envoi, en vérifiant le fil de discussion qui se passe? L'appel de Send ou Post passera au thread de l'interface utilisateur.

Questions connexes