IDisposaleインターフェイスと明示的にMyObject.Disposeをクライアントコードで実装せずにCOMオブジェクトがRCWから切断される直前にコードを実行する方法はありますか?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それから私は、フォームを閉じると、エラーが表示されます。
おかげ
はい、発生する直前に通知を受け取りたいと思います。 – xll
@xll残念ながらそれは不可能です。 – JaredPar