Есть ли способ запустить код, когда COM-объект собирается отключиться от RCW без реализации интерфейса IDisposale и явного вызова MyObject.Dispose в клиентском коде?
Код ниже не работает. Когда программа входит в Finalize sub, приложение ExcelApplication уже отключено от RCW, и я получаю сообщение об ошибке. Я понимаю, почему это происходит, но я хочу найти решение.
Я хочу, чтобы он работал следующим образом: при выпуске последней управляемой ссылки код из подпрограммы Finalize выполняется до отключения COM-объекта.
У меня вопрос: возможно ли это вообще, и если да, то как я могу обработать это событие внутри класса, без необходимости явного вызова 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
Этот класс используется в форме - всего одна строка
Dim ExcelRunner as ExcelRunner = новый ExcelRunner
Затем я закрываю форму и получаю сообщение об ошибке.
Спасибо