Gibt es eine Möglichkeit zu handhaben, wenn das COM -Objekt von RCW getrennt ist?
Frage
Gibt es eine Möglichkeit, Code auszuführen, wenn das COM -Objekt von RCW getrennt wird, ohne die IDISPOSALE -Schnittstelle zu implementieren und myObject.Disponent im Client -Code zu dienen?
Der folgende Code funktioniert nicht. Wenn das Programm ein Sub abschließt, wird ExcelApplication bereits von RCW getrennt, und ich erhalte Fehler. Ich verstehe, warum es passiert, aber ich möchte eine Lösung bekommen.
Ich möchte es folgendermaßen funktionieren lassen: Wenn die letzte verwaltete Referenz veröffentlicht wird, wird der Code von Finalize Sub ausgeführt, bevor das COM -Objekt getrennt wird.
Meine Frage ist - ist es überhaupt möglich und wenn es dann ist, wie kann ich dieses Ereignis innerhalb der Klasse behandeln, ohne dass es explizit von außen abschließt?
Sehr einfache Klasse:
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
Diese Klasse wird in Form verwendet - nur eine einzelne Zeile
Dimer Excelrunner als Excelrunner = neuer Excelrunner
Dann schließe ich das Formular und erhalte Fehler.
Vielen Dank
Lösung
Es hört sich so an, als ob Sie eine Benachrichtigung über einen RCW erhalten möchten, der kurz bevor es passiert wird. Wenn ja, gibt es leider keinen solchen Weg, um sich darauf einzuschließen. Ihr Code muss stattdessen die Möglichkeit berücksichtigen, dass er unerwartet getrennt ist