Ermitteln des Laufens im Haupt-Thread in der C # -Bibliothek

7

Ich erstelle eine C # -Dll, die von anderen Entwicklern in WinForms verwendet wird. Aus irgendwelchen Gründen möchte ich feststellen, ob Methoden aus dieser Bibliothek von Main (GUI) Thread aufgerufen werden und Entwickler warnen, dass er so etwas getan hat (zB in einer Log-Datei). Gibt es eine vernünftige Möglichkeit, aufrufende Methode vom Haupt-Thread zu erkennen? Denken Sie daran, ich habe keinen Zugriff auf WinForm-Anwendung.

    
stachu 22.10.2008, 12:29
quelle

2 Antworten

17

Eine einfache Lösung in diesem Fall ist das Deklarieren eines statischen Steuerelements in der Bibliotheksbaugruppe, die im Haupt-UI-Thread erstellt wird. Wenn Sie feststellen möchten, ob die Bibliothek vom Hauptthread aufgerufen wird, verwenden Sie das folgende

%Vor%     
ageektrapped 22.10.2008, 12:35
quelle
2

Die einfachste Option (wenn Sie ein handliches Formular / Steuerelement haben) ist, InvokeRequired zu überprüfen.

Wenn nicht, dann könntest du versuchen, SynchronizationContext zu verwenden, um einen Post oder einen Send zu simulieren und zu überprüfen, auf welchem ​​Thread das passiert? Wenn Sie Senden oder Senden aufrufen, wechseln Sie zum UI-Thread.

    
Marc Gravell 22.10.2008 12:38
quelle

Tags und Links