私はCOMオブジェクト内のイベントを処理するために匿名メソッドを使用しています。プログラムが終了すると、私が見ていたすべてのリソースに対して、最初のチャンス例外(InvalidComObjectException)が発生するという点で、私が匿名メソッドで使用しているリソースが「正しく閉じられていない」ように見えます。私はこれが大したことではないと思うが、それは「正しい」と感じていない。匿名メソッドでは、キャプチャされた変数をどのように解放/破棄/破棄しますか?
私は、匿名メソッドの範囲外のキャプチャされた変数にアクセスする方法を推測することはできません(これはあなたができないはずのものです)。アプリケーションを終了する前にリソースをクローズ/ディスポーザルするにはどうしたらよいですか?
編集:簡単な再読み込み後、私がここで何をしているのか分かりません。私は、COMオブジェクトを消費するマネージアプリケーションを作成しています。
さらに編集:私はArcGIS Engineを使ってGISデータを操作しています。この特定のケースでは、ILayerEvents_EventのVisibilityChangedイベントを使用して、GISレイヤが表示または非表示になったときを監視しています。イベントは、ブール(可視または不可視)を通過するだけで、レイヤ名ではないため、各レイヤが可視性状態の変更を作成するためにメソッドを作成する必要があります。私は動的なレイヤーを扱っているので、何とかこれを動的に行う方法が必要でした。したがって、匿名の方法です。
anonymouaメソッドの中で、(ILayerコンテキストで)外部ループからILayerEvents_Eventを取得して、どのレイヤを使用しているかを知るILayer変数があります。それは私が立ち往生しているこの時点でです。機能は機能し、アプリケーションを終了するまではすべてが壮大なので、20以上の参照はそこにぶら下がっていますが、例外はありません。
ユーザーが最後にレイヤーを表示/非表示にするのはわかりません。したがって、最後にレイヤーを無効にする方法はありません。私は何かを傷つけているようではないので、私はそれをそのまま残すことができる(または、おそらく匿名の方法よりもこれを行う良い方法がある)と思います。私は何かが足りないと思う。
あなたが何かをノンストップで作業していて、最終的にそれを突破したときにあなたが気分を感じることは知っていますか?私はそこにいる。誰もが助けてくれてありがとう(Marc Gravellを含む)結局のところ、イベントにアタッチされたCOMオブジェクトと匿名メソッドのリストを保持しておき、シャットダウンする前にデリゲートの登録を解除する必要がありました。これは例外をスローせずに動作させました。 –