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

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top