Есть ли способ справиться, когда COM-объект отключен от RCW?
Есть ли способ запустить код, когда 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 как ExcelRunner = новый ExcelRunner
Затем я закрываю форму и получаю ошибку.
Спасибо
1 ответ
Похоже, вы хотите получить уведомление об отключении RCW непосредственно перед тем, как это произойдет. Если так, то, к сожалению, такого способа не существует. Вместо этого ваш код должен учитывать вероятность неожиданного отключения