Announcement

Collapse
No announcement yet.

ObjectDisposedException

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

  • ObjectDisposedException

    Hallo zusammen,

    seit 4 Wochen befasse ich mich jetzt mit C#. Und ich muss sagen: Ich bin recht zufrieden mit mir, C# und der Welt.

    Aber ich lerne immer noch neu Fehlermeldungen kennen.

    Diese mal habe ich ein Singleton Fenster. D.h. eine statische Eigenschaft gibt mir entweder das Objekt zurück, wenn es schon existiert, oder aber es wird mit new ein neues erzeugt, wenn es das Fenster nicht gibt. Somit existiert das Fenster höchstens einmal im Programm.

    Schließe ich das Fenster nun, und zeige es mit Show() wieder an, so wird eine ObjectDisposedExpection ausgelöst, OBWOHL das Fenster existiert!!! Ich kann auch auf alle Eiigenschten des Fenster zugreifen, nur Show() geht nicht!!!

    Woran kann das liegen?

    Bodo

  • #2
    Originally posted by bvl View Post
    Schließe ich das Fenster nun, und zeige es mit Show() wieder an, so wird eine ObjectDisposedExpection ausgelöst, OBWOHL das Fenster existiert!!! Ich kann auch auf alle Eiigenschten des Fenster zugreifen, nur Show() geht nicht!!!

    Woran kann das liegen?
    Hallo Bodo,

    ganz kann ich es nicht erklären, aber in etwa: Wenn Du das Fenster schließt, dann gibst Du es frei. "Irgendwann" einmal beginnt der Garbage Collector (GC) mit dem Aufräumen. Das Formular ist also geschlossen und kann deshalb nicht mehr angezeigt werden; es ist aber noch nicht gelöscht und steht deshalb noch mit seinen Eigenschaften zur Verfügung.

    Vorschlag zum Verfahren: Im Closing-Ereignis sorgst Du dafür, dass das Formular nicht geschlossen wird, aber das rufende Formular wieder aktiviert wird (zum Verfahren dazu z.B. diese Diskussion von Markus Lemcke); von dort aus wird das Singleton-Formular lediglich mit Hide() versteckt.

    Viel Erfolg! Jürgen
    Zuletzt editiert von Jürgen Thomas; 08.05.2007, 19:18. Reason: Link zu Markus Lemcke nachgetragen

    Comment


    • #3
      Ja, die Diskussion habe ich gesehen. Aber ich will ja gerade nicht, dass das Formular - einmal geöffnet - ewig und für alle Zeiten weiter existiert, da es recht speicherintensiv ist.

      Deshalb habe ich mit Dispose() und GC.Collect rumhantiert, damit es wirklich weg ist, aber funktioniert auch nicht.

      Quasi habe ich nicht ein Problem damit, dass es halb weg ist, sondern damit, dass es halb da ist.

      Comment

      Working...
      X