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

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top