Wissen müssen, wenn die Anwendung geschlossen wird
Gibt es eine Möglichkeit zu überwachen, wenn eine Anwendung, die die dll schließt? Die DLL und die Anwendung sind sowohl in C#, sind weder Windows Forms.
Kann ich überprüfen, wenn das Hauptfenster der Anwendung zu schließen, aber ich möchte mich für die DLL "zu sehen," hey das Programm ist der Abschluss und Freigabe von mir, ich sollte dies tun, ganz schnell, bevor ich sterbe".
Keiner Weise, es zu tun? Oder bin ich stecken mit der Anwendung austeilen ", dies tun, bevor Sie sterben"?
- Warum brauchen Sie das? Managed DLLs frei, Ihre Ressourcen automatisch durch den garbage-collector. Wenn Sie brauchen, um frei unverwaltete Ressourcen verwenden Abschluss.
- Mit Finalizer für das freigeben von Ressourcen ist nicht empfohlen, da es indeterministic. Stattdessen Objekt implementieren sollte
IDisposable
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht die
AppDomain.ProcessExit
Ereignis für Sie arbeiten würde? Beachten Sie die folgenden, obwohl (aus der Dokumentation):Kennen wir nicht die details des Codes, aber die Tatsache, dass Ihre Klasse Bibliothek muss sich bewusst sein, wenn der Prozess beendet wird möglicherweise ein Designfehler in deiner Anwendung.
Wenn Sie brauchen, um die Freigabe von Ressourcen oder bereinigen andere Dinge, die in einer deterministischen Art und Weise, sollten Sie einen Blick auf die
IDisposable
- Schnittstelle. Wenn die Klassen ausgesetzt, die von Ihrer Bibliothek implementiert diese Schnittstelle Anrufer kann Zustand leicht, dass Sie nicht mehr brauchen-dll-Funktionalität durch Aufruf vonDispose()
.Vielleicht ein guter Ausgangspunkt für die weitere Betrachtung werden in den folgenden Artikeln:
Zum Beispiel könnten Sie haben die folgende Klasse in der Klassenbibliothek:
In deinem main-Modul können Sie dann in der folgenden Art und Weise, die
using
- Anweisung wird sichergestellt, dass dieDispose()
- Methode aufgerufen wird:IDisposable()
.AppDomain.ProcessExit wird, "normal" zu funktionieren, ist aber nicht garantiert, um Feuer, wenn ein Prozess beendet wird, indem Sie task-manager zum Beispiel. Daher kann es nicht ideal sein, wenn Ihr Gerät Treiber lassen muss große Ressourcen etc (also Sie kann nicht freigegeben werden, bis Sie die GC erhalten s rund um it).
Sehen Rick Stahls blog für mehr details.
Wenn es für Konsole-Anwendung, die Sie benötigen, zu tun, wie die akzeptierten Antworten in diese Frage.
Und es ist am besten zu entwickeln, mit
IDisposable
- Schnittstelle.