Objekt im Thread existiert nicht mehr

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Tukuan.

    Objekt im Thread existiert nicht mehr

    Hallo Leute,

    ich habe ab und an Probleme mit einem Thread, das via der Com-Schnittstelle auf ein erstelltes Objekt zugreift.
    Es handelt sich um die imcReportLib (falls die jemand kennt).

    Zu 90 % funktioniert die Routine wunderbar. Also sie läuft durch und macht was sie soll...

    Sie enthält diese Codezeilen:

    VB.NET-Quellcode

    1. Dim SwReportGeno As New ImcReportLib.RgApplication
    2. Dim MyDRBFile As ImcReportLib.RgDocument
    3. MyDRBFile = SwReportGeno.OpenDocument("c:\temp\temp.drb", 0)
    4. MyDRBFile.Texts("DataSetName").Text = FileName
    5. MyDRBFile.Texts("MeasurementDate").Text = SWFileDataSet.FileCreationDate.ToString
    6. MyDRBFile.Texts("KindOfSwitching").Text = KindOfSwitching


    Dann folgen weitere Zeilen wie die letzten drei.

    Ab und an kommt dann irgendwann (also mal bei der 1, 3, 10, oder ...) in einer der Zeile "MyDRBFile.Texts("xxx").Text = yyy" die folgende Fehlermeldung:

    "System.Runtime.InteropServices.COMException wurde nicht behandelt. ErrorCode=-2147219625 Message= Es existiert kein geöffnetes Dokument mit dem angegebenen Titel.
    Source=""
    StackTrace: bei ImcReportLib.IRgTable.set_CellText(Int32 Column, Int32 Row, String Value)
    bei PowerQualityAnalysis.SwitchReportSingleFile.CreateSingleSwitchingDRBFile()
    in E:\40_Software\10_____PQA\00_PQA_Sourcen\PowerQualityAnalysis\SwitchOperation\SwitchReportFileGeno.vb:Zeile 91.
    bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
    bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
    bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    bei System.Threading.ThreadHelper.ThreadStart()
    InnerException: "

    Warum passiert das? Ist es der .net Garbage Collector? Der das Objekt dann löscht?

    Und wie kann ich das verhindernt?

    Oder was ist es sonst? Bin ratlos...

    Vielen Dank schon mal im Voraus
    Tukuan
    Mein erster Gedanke war: "COM? -> STA!" aber daran liegt's wohl nicht. Kannst du irgendwie vorher überprüfen, ob das angeforderte Dokument offen ist? Hast du dir beim Debuggen schonmal die Objekte angeschaut(à la "sind sie leer")?

    Objekt wurde geladen

    Also der Report wird aufgemacht (ist ein Programm das geöffnet wird).
    Die Objekte sind nicht Nothing. Also irgenwie da...
    Wenn ich im Debuggen zurück zum Anfang springe und das Objekt noch mal initialisieren lasse, bleibt es aber dabei. Also die Fehlermeldung kommt weiterhin. Aber weiterhin nicht immer in der selben Zeile...

    Grüße
    @Tukuan:: Pack mal die betreffenden Deklarationen aus der Prozedur in die Klasse.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Konnte es endlich ausprobieren. So ein Mist... Hat nicht geklappt. Also das mit dem Auslagern in die Klasse...
    Hat jemand noch eine Idee?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Tukuan“ ()