Gibt es eine Möglichkeit für mich, die Ausfahrt von verwalteten Threads Haken (dh einen Code auf einem Thread ausgeführt, kurz bevor es beendet?)Anspannen Fadenausgang
ich einen Mechanismus zum Einhaken Fadenausgang entwickelt haben, die funktioniert für einige Threads. Schritt 1: Entwickeln Sie eine STA COM-Klasse "hook", die eine Rückruffunktion übernimmt und sie in ihrem Destruktor aufruft. Schritt 2: Erstellen Sie eine ThreadStatic-Instanz dieses Objekts im Thread, den ich haken möchte, und übergeben Sie dem Objekt einen verwalteten Delegaten, der in einen nicht verwalteten Funktionszeiger konvertiert wurde. Der Delegat wird dann beim Thread-Exit aufgerufen (da die CLR IUnknown :: Release für alle STA COM RCWs als Teil des Thread-Exits aufruft).
Dieser Mechanismus funktioniert z. B. bei Worker-Threads, die ich im Code mithilfe der Thread-Klasse erstelle.
Es scheint jedoch nicht für den Hauptthread der Anwendung zu funktionieren (sei es eine Konsole oder Windows-App). Das COM-Objekt "Hook" scheint beim Herunterfahren zu spät gelöscht zu werden, und der Versuch, den Delegaten aufzurufen, schlägt fehl.
(Der Grund, warum ich diese Einrichtung implementieren möchte, ist, damit ich nativen COM-Code für den auslaufenden Thread ausführen kann, der mit STA COM-Objekten arbeitet, die im Thread erstellt wurden, bevor 'zu spät' (dh vor dem Thread) wurde beendet, und es ist nicht mehr möglich, mit STA COM-Objekten in diesem Thread zu arbeiten.))
Absatz 1: nein. Absatz 2: Ja, aber kein Problem. Absatz 3: Nein, der Destruktor der nativen C++ - Implementierung der Co-Klasse. Absatz 4: hmmm, ich werde das überprüfen. Absatz 5: Notwendig dennoch. – mackenir
Leider wird AppDomain ProcessExit für einen anderen Thread als den Hauptthread aufgerufen. – mackenir