arcbjectsマップイベントを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