Есть ли способ обработать, когда Com Object отключен от RCW?

StackOverflow https://stackoverflow.com/questions/9302991

  •  25-10-2019
  •  | 
  •  

Вопрос

Есть ли способ запустить код, когда объект 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 отключается непосредственно перед тем, как это произойдет. Если так, к сожалению, нет такого способа зацепить это. Ваш код должен вместо этого учитывать возможность, что он неожиданно отключен

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top