Frage

Ich habe eine Klasse bekommt, die ein Dokument (GH_Document) darstellt. GH_Document hat eine Autosave-Verfahren auf sie, die jeder potenziell gefährlichen Betrieb vor genannt wird. Diese Methode erstellt (oder Überschreibungen) eine Autosave-Datei neben der Originaldatei.

GH_Document enthält auch eine Methode namens DestroyAutoSaveFiles (), die jede und alle Dateien von der Festplatte entfernt, die durch die Autosave-Funktion erstellt wurden. Ich nenne diese Methode auf Dokumente, wenn der App schliesst, und auch, wenn Dokumente entladen lassen. Es scheint jedoch, ich ein paar Fälle verpasst, da Autosave Dateien noch nach einigen erfolgreichen Abschaltungen sind.

Also das hat mir denken. Was ist der beste Weg, Situationen wie diese zu behandeln? Sollte ich alle möglichen Wege, auf denen Dokumente aufzuspüren kann überall automatisch gespeicherte Bereinigungslogik verschwinden und fügen? Oder sollte ich IDisposable implementieren und führen Bereinigung in GH_Document.Dispose ()? Oder sollte ich tun dies in GH_Document.Finalize ()?

Das einzige Mal, dass ich eine automatisch gespeicherte Datei möchte auf der Festplatte bleiben soll, wenn die Anwendung abstürzt. Sind Entsorgen und Finalisierung garantiert nicht im Falle eines Absturzes aufgerufen werden?

War es hilfreich?

Lösung

  

Sind Entsorgen und Finalisierung garantiert nicht im Fall eines Absturzes aufgerufen werden?

In der Regel nicht, obwohl es hängt davon ab, wie Ihre Anwendung abstürzt. In C # wird es in der Regel das Ergebnis einer nicht erfassten Ausnahme auf die oberste Ebene ausbreiten werden. In diesem Fall werden alle schließlich Klauseln über die Art und Weise ausgeführt werden, bis der Stapel, und das schließt Entsorgen Sie Anrufe von Anweisungen.

Wenn die Anwendung plötzlich beendet (zum Beispiel, indem sie es in der Task-Manager zu töten) die schließlich Klauseln nicht in Anspruch genommen werden, aber man sollte sich nicht auf diesem Verhalten.

Eine einfache Lösung ist Ihre Auto-Save-Dateien in einem versteckten Verzeichnis mit einer speziellen Namenskonvention zu setzen und alle automatisch gespeicherten Dateien in diesem Verzeichnis auf erfolgreiche Herunterfahren löschen.

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