Есть ли способ обработать, когда Com Object отключен от RCW?
Вопрос
Есть ли способ запустить код, когда объект COM собирается отключить от RCW без реализации интерфейса Idisposale и явного Call MyObject.Sispose в клиентском коде?
Код ниже не работает. Когда программа завершает завершение sub, ExcelApplication уже отключается от RCW, и я получаю ошибку. Я понимаю, почему это происходит, но я хочу получить решение.
Я хочу заставить его работать следующим образом: когда выйдет последняя управляемая ссылка, код из sub infintize выполняется до отключения объекта COM.
Мой вопрос: возможно ли это вообще, и если это так, то как я могу справиться с этим событием внутри класса, без необходимости позвонить в окончание явно снаружи?
Очень простой класс:
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
Затем я закрываю форму и получаю ошибку.
Спасибо
Решение
Похоже, вы хотите получить уведомление о том, что RCW отключается непосредственно перед тем, как это произойдет. Если так, к сожалению, нет такого способа зацепить это. Ваш код должен вместо этого учитывать возможность, что он неожиданно отключен