我正在使用匿名方法来处理 COM 对象中的事件。一旦程序终止,我在匿名方法中使用的资源似乎没有被“正确关闭”,因为我看到的每个资源都会出现第一次机会异常 (InvalidComObjectException)。我想这没什么大不了的,但感觉并不“正确”。
我无法理解在匿名方法范围之外访问那些捕获的变量的方法(无论如何,你不应该这样做)。如何在退出应用程序之前关闭/处置资源?
编辑:经过简短的重新阅读后,我可能不清楚我在这里做什么。我正在编写一个使用 COM 对象的托管应用程序。
进一步编辑:我正在使用ArcGIS Engine来操作 GIS 数据。在这种特殊情况下,我使用 ILayerEvents_Event 中的 VisibilityChanged 事件来监视 GIS 图层何时可见或不可见。该事件仅传递一个布尔值(可见或不可见)而不是图层名称,因此需要为每个图层创建一个方法来创建其可见性状态更改。由于我正在处理动态层,因此我需要一种以某种方式动态执行此操作的方法,因此需要匿名方法。
在 anonymoua 方法中,我有一个 ILayer 变量,它从外部循环(在 ILayer 上下文中)获取 ILayerEvents_Event,以便我知道我正在使用哪个层。正是在这一点上,我被困住了。在我退出应用程序之前,该功能正常工作,一切都很好,让这 20 多个引用挂在那里,无处可去,只有一个例外。
我不知道用户何时会最后一次隐藏/显示图层,因此无法在最后一次将内容归零。我想我可以保持原样(或者,也许有比匿名方法更好的方法),因为它似乎没有伤害任何东西。我只是觉得我错过了一些东西。