¿Hay alguna forma de manejar cuando el objeto COM se desconecta de RCW?
Pregunta
¿Hay alguna forma de ejecutar el código cuando el objeto COM está a punto de desconectarse de RCW sin implementar la interfaz IDISPOSAL y la llamada explícita myObject. Disposición en el código del cliente?
El siguiente código no funciona. Cuando el programa ingresa Finalize Sub, Excelapplication ya está desconectado de RCW, y recibo error. Entiendo por qué sucede, pero quiero obtener una solución.
Quiero que funcione de la siguiente manera: cuando se lanza la referencia administrada por última vez, el código de Finalize Sub se ejecuta antes de desconectar el objeto COM.
Mi pregunta es: ¿es posible en absoluto y si es así, ¿cómo puedo manejar este evento dentro de la clase, sin necesidad de llamar finalizar explícitamente desde afuera?
Clase muy simple:
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
Esta clase se usa en forma, solo una línea.
Dim Excelrunner como Excelrunner = New Excelrunner
Luego cierro el formulario y recibo un error.
Gracias
Solución
Parece que desea recibir una notificación sobre un RCW desconectado justo antes de que suceda. Si es así, desafortunadamente no hay tal manera de conectarse a eso. Su código debe tener en cuenta la posibilidad de que esté inesperadamente desconectado