[gelöst] Forms und temporäre Dateien zum Programmende schliessen



  • Das Programm verwendet mehrere vom Anwender auswählbare Forms. Einige dieser Forms verwenden temporäre Dateien,
    die zum Programmende gelöscht werden sollen. File.Delete(tempfile) führt zu einer Exception, wenn beim Schliessen
    des Programmes noch eine Form mit Datei geöffnet ist.

    Ich will also bei mainform_Closing oder mainform_Closed zunächst mit den noch offenen Forms und Dateien komplett aufräumen.


  • Administrator

    Und wieso nicht bei ApplicationExit ? Dann sind alle Forms bereits geschlossen. Oder brauchen die Forms zusätzlichen manuellen Bedarf, um aufzuräumen? Dann wären vielleicht ein paar zusätzliche Informationen wünschenswert. Es ist mir jedenfalls nicht so ganz klar, wieso Forms und Dateien noch offen sein können.

    Grüssli



  • Dravere schrieb:

    Es ist mir jedenfalls nicht so ganz klar, wieso Forms und Dateien noch offen sein können.

    Grüssli

    Tja, ich schaetze mal weil jemand die gaengigen Programmierparadigmen nicht einhaelt oder einfach nur Unsinn programmiert 🙂



  • Danke für die Hinweise, Problem gelöst.

    Es ging um temporär in Dateien abgelegte Images, die in PictureBoxes in Forms angezeigt werden.
    Statt Image.FromFile() mache ich das jetzt mit einem FileStream der Datei und hole diesen mit Image.FromStream().
    Nach Übernahme des Images in die PictureBox wird der Stream mit Close() geschlossen. So lassen sich
    die Dateien unter mainForm_Closing() ohne mögliche exception löschen.


  • Administrator

    Du kannst auch Image.FromFile weiterhin verwenden, musst aber halt einfach Image.Dispose aufrufen, wenn die Form geschlossen wird. Wie man dies auch in der Dokumentation nachlesen kann:

    MSDN schrieb:

    The file remains locked until the Image is disposed.

    http://msdn.microsoft.com/en-us/library/stf701f5.aspx

    Was du übrigens sowieso tun solltest, auch wenn du FileStream verwendest. Du erzeugst sonst ein mögliches Memory-Leak an GDI+ Handles.

    Grüssli


Anmelden zum Antworten