2012-02-15 4 views
0

Existe-t-il un moyen d'exécuter du code lorsque l'objet COM est sur le point d'être déconnecté de RCW sans implémenter l'interface IDisposale et l'appel explicite MyObject.Dispose dans le code client?Est-il possible de gérer lorsque l'objet COM est déconnecté de RCW?

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

Je souhaite le faire fonctionner de la manière suivante: lorsque la dernière référence gérée est libérée, le code du sous-programme Finalize est exécuté avant que l'objet COM ne soit déconnecté.

Ma question est - est-ce possible et si c'est alors comment puis-je gérer cet événement dans la classe, sans besoin d'appeler Finalize explicitement de l'extérieur?

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 - une seule ligne

Dim ExcelRunner comme ExcelRunner = new ExcelRunner

Alors je ferme la forme, et erreur de réception .

Merci

Répondre

0

Il semble que vous souhaitez recevoir une notification au sujet d'un RCW étant déconnectés juste avant qu'il ne se passe. Si c'est le cas, il n'y a malheureusement aucun moyen d'y parvenir. Votre code doit plutôt prendre en compte la possibilité qu'il soit déconnecté de manière inattendue.

+0

Oui, je souhaite recevoir une notification juste avant que cela ne se produise. – xll

+0

@xll malheureusement ce n'est pas possible. – JaredPar

Questions connexes