comオブジェクトがRCWから切断されたときに処理する方法はありますか?
質問
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が発生する直前に切断されているという通知を受け取りたいと思うようです。もしそうなら、残念ながらそれに接続するような方法はありません。代わりに、コードが予期せず切断されている可能性を説明する必要があります
所属していません StackOverflow