comオブジェクトがRCWから切断されたときに処理する方法はありますか?

StackOverflow https://stackoverflow.com/questions/9302991

  •  25-10-2019
  •  | 
  •  

質問

IDISPOSALEインターフェイスを実装せずにRCWからCOMオブジェクトを切断しようとしているときにコードを実行する方法はありますか。

以下のコードは機能していません。プログラムがSubを締めくくると、ExcelApplicationはすでにRCWから切断されており、エラーが発生します。なぜそれが起こるのか理解していますが、解決策を取得したいです。

次のように機能させたい:Last Managed Referenceがリリースされると、COMオブジェクトが切断される前にFinalize Subのコードが実行されます。

私の質問は - それはまったく可能ですか?もしそうなら、クラス内でこのイベントをどのように扱うことができますか、外部から明示的にファイナライズを呼び出す必要はありませんか?

非常にシンプルなクラス:

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としてのDim Excelrunner =新しいExcelrunner

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

ありがとう

役に立ちましたか?

解決

RCWが発生する直前に切断されているという通知を受け取りたいと思うようです。もしそうなら、残念ながらそれに接続するような方法はありません。代わりに、コードが予期せず切断されている可能性を説明する必要があります

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top