Announcement

Collapse
No announcement yet.

Schliesse Form, dann Call auf Destruktor , dann Error

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Schliesse Form, dann Call auf Destruktor , dann Error

    Hallo hier,
    (diese thema gibt es auch auf activevb, man kann da aber keine datei einhängen)

    Das Form hat nur Code im Load-Event. Der Error tritt auf wenn das Form geschlossen wird. Und zwar je nach auskommentieren von best. Codezeilen(hab ich beschrieben im Project), wird beim schliessen der Destruktor in der BaseClass aufgerufen.
    Der Error tritt auf weil der Destruktor, nun, nicht nur zweimal aufgerufen wird, sondern er will noch eine drittesmal den gesammten Prozess durchlaufen und trifft dann aber auf ein Object das bereits zerstört ist. Eigentlich sollte die disposed Variable auf True stehen und den nochmaligen Durchlauf verhindern, tut sie aber nicht.

    Ich kann diesen Error vermeiden, indem ich im Load-Event, im Finally Abschnitt die Dispose Methode für die beiden Objecte aufrufe. Aber der Sinn des Destruktor ist ja geader der, Das Object zu zerstören wenn ich als Entwickler, dies im Code versäumt hab.

    Und letztllich, vielleicht das Confuseste, wenn ich im Load-Event, die letzte Zeile "
    Code:
     lngAnzIdNr = myDeriTwo.GetNumberOf(strSQL);
    " auskommnetiere, tritt der Error nicht auf.

    Und, es gibt ein FileStream object, im Kopf der Baseclass:
    Code:
    filestream = new FileStream(@"C:\test.txt", FileMode.OpenOrCreate);
    ist diese Zeile activ gibt es keinen Error.

    Hat jemand eine Erklärung für dies Verhalten?
    Gruss Eric
    Attached Files

  • #2
    Klingt so abstrus das man das debuggen müsste um das nachzuvollziehen, ohne die DB aber nicht möglich. Ich fang jetzt nicht an mir eine zu basteln

    So kann ich nur ein wenig allgemeine Kritik bezüglich des benutzten Musters geben.
    Sich die OleDB Komponenten zu merken ist völlig überflüssig und vermutlich eine Ursache der Probleme. Die Connection wird eh schon intern gepoolt die kann man einfach erzeugen und zerstören ohne teure neue Connection zur DB (ist bei einer Desktopdatenbank wie Access eh schon fast irrelevant). Also wenn du einen Connection,Command etc. brauchst erzeuge die ~vor Ort~ (also in der Methode wie z.B. GetNumberOf) und zerstöre die auch dort sofort wieder. Wenn man dann auch noch den using Syntax verwendet ist das nahezu failsafe.

    Comment


    • #3
      Deine Kritik ist dann von Wert , wenn man dieses Beispiel als Idee versteht, mit einem Connection-Object so umzugehen.

      Bastel-Anleitung:
      - Tabelle machen
      - ein Field, Name: "IdNr"

      Comment


      • #4
        Jetzt kann ich dir nicht ganz folgen fehlt dir ein Codebeispiel?

        Comment


        • #5
          Jetzt kann ich dir nicht ganz folgen fehlt dir ein Codebeispiel?
          Und ich kann deiner Folgerung nicht folgen

          Comment

          Working...
          X