Ich verwende anonyme Methoden, um Ereignisse in einem COM-Objekt zu behandeln. Sobald das Programm beendet wird, scheint es, dass die Ressourcen, die ich in der anonymen Methode verwende, nicht "korrekt geschlossen" werden, da ich für jede Ressource, die ich gerade sah, eine Ausnahme der ersten Chance (InvalidComObjectException) erhalte. Ich nehme an, das ist keine große Sache, aber es fühlt sich nicht "richtig" an.Wie kann man erfasste Variablen in anonymen Methoden freigeben/löschen/löschen?
Ich kann einen Weg nicht verstehen, auf diese erfassten Variablen außerhalb des Bereichs der anonymen Methoden zuzugreifen (was du sowieso nicht können sollst). Wie kann ich die Ressourcen vor dem Beenden der Anwendung schließen/entsorgen?
EDIT: Nach einer kurzen Neu-Lesung, kann es nicht klar sein, was ich hier mache. Ich schreibe eine verwaltete Anwendung, die ein COM-Objekt verwendet.
Weiter Bearbeiten: Ich verwende ArcGIS Engine, um GIS-Daten zu manipulieren. In diesem speziellen Fall verwende ich das VisibilityChanged-Ereignis in ILayerEvents_Event, um zu überwachen, wann eine GIS-Schicht sichtbar oder unsichtbar gemacht wird. Das Ereignis übergibt NUR einen Bool (sichtbar oder nicht sichtbar) und NICHT den Layernamen. Daher müsste eine Methode für JEDEN Layer erstellt werden, um den Sichtbarkeitsstatus zu ändern. Da ich mich mit dynamischen Ebenen beschäftige, brauchte ich eine Möglichkeit, dies irgendwie dynamisch zu machen, daher die anonymen Methoden.
Innerhalb der Anonymousa-Methode habe ich eine ILayer-Variable, die das ILayerEvents_Event von einer äußeren Schleife (in einem ILayer-Kontext) ergreift, so dass ich weiß, mit welcher Schicht ich arbeite. Es ist an diesem Punkt, dass ich feststecke. Die Funktionalität funktioniert und alles ist großartig, bis ich die Anwendung verlasse und die 20+ Referenzen dort hängen lasse, ohne einen Platz für eine Ausnahme.
Ich habe keine Ahnung, wann der Benutzer eine Schicht zum letzten Mal verstecken/zeigen wird, also gibt es keine Möglichkeit, Dinge auf die letzte Stufe zu bringen. Ich nehme an, ich kann es einfach so lassen wie es ist (oder vielleicht gibt es einen besseren Weg dies zu tun als die anonymen Methoden), da es scheinbar nichts verletzt. Ich denke nur, dass ich etwas vermisse.
Sie wissen, dass Sie das Gefühl haben, wenn Sie ununterbrochen an etwas gearbeitet haben und Sie es schließlich durchbrechen? Ich bin dort. Danke für die Hilfe von allen (einschließlich Marc Gravell aus einem separaten Post). Ich musste schließlich eine Liste der COM-Objekte und der an ihre Ereignisse angehängten anonymen Methoden führen und meldete dann die Delegierten vor dem Herunterfahren ab. Das hat Dinge funktioniert, ohne die Ausnahme zu werfen. –