Есть ли способ запустить код, когда COM-объект вот-вот будет отключен от RCW без реализации интерфейса IDisposale и явного вызова MyObject.Dispose в клиентском коде?Есть ли способ обработки, когда COM-объект отключен от RCW?
Код не работает. Когда программа вводит субтитры Finalize, 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, как ExcelRunner = новый ExcelRunner
Тогда я закрываю форму, и появляется сообщение об ошибке ,
Благодаря
Да, я хочу получать уведомление непосредственно перед тем, как оно произойдет. – xll
@xll, к сожалению, это невозможно. – JaredPar