0

COM オブジェクトが RCW から切断されようとしているときにコードを実行する方法はありますか?

以下のコードは機能しません。プログラムが Finalize サブに入ると、ExcelApplication は既に RCW から切断されており、エラーが発生します。原因はわかりましたが、解決策を知りたいです。

次のように動作させたい: 最後のマネージ参照が解放されると、COM オブジェクトが切断される前に Finalize サブからのコードが実行されます。

私の質問は - それはまったく可能ですか?そうであれば、Finalizeを外部から明示的に呼び出す必要なく、クラス内でこのイベントをどのように処理できますか?

非常に単純なクラス:

Public Class ExcelRunner

  Dim ExcelApplication As Excel.Application

  Public Sub New()

    ExcelApplication = New Excel.Application
    ExcelApplication.Visible = True

  End Sub

  Protected Overrides Sub Finalize()

    MyBase.Finalize()
    ExcelApplication.Quit()

  End Sub

End Class

このクラスはフォームで使用されます - 1 行だけです

ExcelRunner として ExcelRunner を暗くする = 新しい ExcelRunner

次に、フォームを閉じてエラーを受け取ります。

ありがとう

4

1 に答える 1

0

RCW が切断される直前に、RCW が切断されたという通知を受け取りたいようです。もしそうなら、残念ながらそれにフックする方法はありません。代わりに、コードが予期せず切断される可能性を考慮に入れる必要があります

于 2012-02-15T23:24:09.443 に答える