2010-01-22 7 views
3

J'ai un assembly C# .NET qui est appelé à partir d'un client COM C++. Lorsque le processus client publie explicitement l'objet COM, le CCW libère sa référence interne, rendant ainsi l'objet .NET éligible pour la récupération de place. Que faire si l'objet .NET a un constructeur statique qui ouvre un fichier journal?Com Wrapper Callable et la vie de l'objet .NET

Existe-t-il une solution élégante pour fermer le fichier journal sans une demande explicite du client?

TIA.

Répondre

1
finaliseur la poignée

Après certains tests utilisant AppDomain.ProcessExit EventHandler semble être un bon choix pour fermer le fichier journal.

0

Si vous ne voulez pas modifier le client COM, vous n'avez pas de chance pour toute magie close déterminée. En fin de compte le descripteur de fichier sera être fermé à un moment donné à l'avenir (en supposant qu'il est un FileStream) quand est appelé par le GC après votre CCW perd sa racine GC (s.)

-Oisin

+0

Le Finalizer sera-t-il appelé à la fin du processus client? –

+0

S'il s'agit d'un serveur COM in-process: oui. –

+0

Après certains tests utilisant AppDomain.ProcessExit EventHandler semble être un bon choix pour fermer le fichier journal. –