Ich habe eine Singleton-ähnliche Klasse, die einige Protokollierung Ausgang tun können:Flush Stream am Ende seiner Lebensdauer
Wenn ich in einem Beispielprogramm wie
class Program
{
private static void Main(string[] args)
{
Foo.Instance.Log("asdf\n");
}
}
verwenden, dass die Datei wird erstellt, aber es wird keine Ausgabe geschrieben. Ich nehme an, dies ist, weil die StreamWriter
wurde nie geleert.
Ich habe versucht, die Klasse zu reparieren, indem in ~Foo()
zu Close()
Aufruf:
~Foo()
{
os.Close();
}
aber dies ergibt eine ObjectDisposedException
. Anscheinend wurde Foo.os
bereits entsorgt, wenn der Destruktor Foo
aufgerufen wird.
Wie stelle ich sicher, dass mein StreamWriter
"endlich" geleert wird?
EDIT
Einstellung this.os.AutoFlush = true;
funktioniert. Hinzufügen einer Flush()
Methode zu Foo
und Aufruf an geeigneten Orten tut auch, aber ich bin interessiert, wenn es einen Weg gibt, ohne zu tun.
Implementieren Sie die [IDisposable Schnittstelle] (https://msdn.microsoft.com/en-us/library/system.idisposable (v = vs.110) .aspx) – Steve
Ich dachte daran, aber in dem angegebenen Beispiel 'Dispose()' wird nicht aufgerufen. – mkluwe
Das ist ein Destruktor. Es ist anders Siehe: http: //stackoverflow.com/questions/339063/what-is-the-difference-between-using-idisposable-vs-a-destructor-in-c – Steve