Autor Beitrag
Viertausend
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 03.03.09 10:29 
Hallo,

ich habe eine Klasse welche die Schnittstelle IDisposable implementiert. Diese Klasse ist als Singleton konzipiert und dient zum Protkollieren von Meldungen und Fehlern. Es ist wichtig dass die gespeicherten Meldungen beim Beenden des Programm gespeichert werden -> deshalb die IDisposable implementierung.

Nun Frage ich mich ob es der korrekte Ansatz ist, die Meldungen in der Dispose() Methode zu schreiben und ob sichergestellt ist, dass diese Methode immer aufgerufen wird (d.h. bei einer Exception, etc.) oder ob ich lieber einen ganz anderen Ansatz gehen sollte?

Grüße
4000
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 03.03.09 14:51 
Dispose wird nur dann aufgerufen, wenn du das irgendwo im restlichen Code selbst tust ;) . IDisposable ist nur ein gewöhnliches Pattern und nicht irgendwie in der CLR verankert.
Ich würde (keine Singletons schreiben, aber lassen wir das ;) ) mich in Application.ApplicationExit und AppDomain.UnhandledException einklinken. Ansonsten könntest du auch einen Destruktor benutzen, aber auch der muss nicht immer aufgerufen werden:
Zitat:
The Finalize method might not run to completion or might not run at all in the following exceptional circumstances:

Another finalizer blocks indefinitely (goes into an infinite loop, tries to obtain a lock it can never obtain and so on). Because the runtime attempts to run finalizers to completion, other finalizers might not be called if a finalizer blocks indefinitely.

The process terminates without giving the runtime a chance to clean up. In this case, the runtime's first notification of process termination is a DLL_PROCESS_DETACH notification.


_________________
>λ=