我将一个arcobjects地图事件挂钩到vb.net表单以侦听地图选择更改。这一切都正常,但用户在打开表单时偶尔报告这个错误。我看不到任何模式来重现错误,它似乎是随机的。“已与其基础RCW分离的COM对象无法使用”与vb.net表单事件相关的错误
“已从与其基础RCW分开COM对象不能使用”
它从表单负载起源()方法,其中,我挂钩事件。
任何人都可以帮助我了解我做错了什么吗?我正在解决FormClosing()事件中的地图选择事件,我认为这是正确的方法。
Public Class MyForm
Private _activeViewEvents As IActiveViewEvents_Event
Private Sub FormLoad(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
_activeViewEvents = TryCast(pMxDoc.ActiveView.FocusMap, IActiveViewEvents_Event)
AddHandler _activeViewEvents.SelectionChanged, AddressOf SelectionChanged
End Sub
Private Sub SelectionChanged
'do something when selection is changed
End Sub
Private Sub FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
RemoveHandler _activeViewEvents.SelectionChanged, AddressOf SelectionChanged
End Sub
End Class
我已经采取了这种方法,但不幸的是问题仍然存在。我的表单也与文档事件挂钩,因此在文档更改时从未打开。每当地图文档发生变化时,用户都必须重新加载表单,所以FormLoad()总是为新文档重新创建处理程序。我怀疑它与更改地图文档有关,所以我会稍微深入一点。 – Courlu
任何你使用'Marshal'或'ComReleaser'处理资源的机会? – Jumpercables
不,我只处理搜索游标,但没有涉及此表单或事件。 – Courlu