我將一個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