Я использую анонимные методы для обработки событий в COM-объекте. Как только программа завершается, оказывается, что ресурсы, которые я использую в анонимном методе, не закрываются правильно, поскольку я получаю исключение первого шанса (InvalidComObjectException) для каждого ресурса, который я наблюдал. Я полагаю, это не имеет большого значения, но это не кажется «правильным».
Я не могу понять, как получить доступ к этим захваченным переменным за пределами анонимных методов (которые вы в любом случае не должны делать). Как я могу закрыть/утилизировать ресурсы перед выходом из приложения?
РЕДАКТИРОВАТЬ: После краткого повторного чтения может быть неясно, что я здесь делаю. Я пишу управляемое приложение, которое использует COM-объект.
Дальнейшее редактирование: я использую ArcGIS Engine для управления данными ГИС. В данном конкретном случае я использую событие VisibilityChanged в ILayerEvents_Event, чтобы отслеживать, когда слой ГИС становится видимым или невидимым. Событие ТОЛЬКО передает логическое значение (видимый или невидимый), а НЕ имя слоя, поэтому необходимо создать метод для КАЖДОГО слоя, чтобы изменить его состояние видимости. Поскольку я имею дело с динамическими слоями, мне нужен был способ сделать это динамически, отсюда и анонимные методы.
Внутри метода anonymoua у меня есть переменная ILayer, которая получает ILayerEvents_Event из внешнего цикла (в контексте ILayer), чтобы я знал, с каким слоем я работаю. Именно в этот момент я застрял. Функциональность работает, и все замечательно, пока я не выхожу из приложения, оставляя эти 20+ ссылок висящими там, и им некуда идти, кроме исключения.
Я понятия не имею, когда пользователь будет скрывать/показывать слой в последний раз, поэтому нет никакого способа обнулить все в последний раз. Я полагаю, что могу просто оставить все как есть (или, возможно, есть лучший способ сделать это, чем анонимные методы), поскольку, похоже, это ничему не вредит. Я просто думаю, что я что-то упускаю.