Question

Est-il possible d'exécuter du code lorsque l'objet COM est sur le point d'être déconnecté de RCW sans mettre en oeuvre l'interface IDisposale et MyObject.Dispose d'appel explicite dans le code client?

Le code ci-dessous ne fonctionne pas. Lorsque le programme entre Finaliser sous, ExcelApplication est déjà déconnecté de RCW, et j'obtiens l'erreur. Je comprends pourquoi cela arrive, mais je veux une solution.

Je veux le faire fonctionner de la façon suivante:. Lors de la dernière référence géré est libéré, le code de sous Finaliser est exécutée avant que l'objet COM est déconnecté

Ma question est - est-il possible à tous et si elle est alors comment puis-je gérer cet événement à l'intérieur de la classe, sans avoir besoin d'appeler explicitement à l'extérieur Finaliser

classe très 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

Cette classe est utilisée sur la forme - juste une seule ligne

Dim ExcelRunner comme ExcelRunner = new ExcelRunner

Alors je ferme la forme, et recevoir l'erreur.

Merci

Était-ce utile?

La solution

On dirait que vous souhaitez recevoir une notification au sujet d'un RCW étant déconnecté juste avant qu'il arrive. Dans ce cas il n'y a malheureusement pas une telle façon de connecter en cela. Vos besoins de code pour compte au lieu de la possibilité que c'est déconnecté de manière inattendue

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top