Hallo und danke für Ihre Hilfe. Dieses Mal habe ich ein seltsames Problem mit einem Programm (C#) Ich schreibe und würde gerne Ihren Rat hören. Ich bin ein normales Programm (nicht multithreaded) schreiben, aber dann hinzugefügt auf einer Datei einen Timer (System.Timers.Timer)Timer, Dateien und Rennbedingungen?
Auch einen Stream Ich verwende zu schreiben. Ich öffne diese ähnliche
StreamWriter logStream=new StreamWriter(filename, true);
was bedeutet, dass, wenn die Datei vorhanden ist, es hängt, wenn es nicht schafft.
Später schreibe ich in der Datei wie diese
logStream.WriteLine(message);
Allerdings schreibe ich sowohl auf den Strom von die Hauptfunktion und der Funktion, die durch den Timer aufgerufen wird.
die Problemsymptome
Mein Programm einen Fehler wirft manchmal, wenn ich den Strom spülen oder schreiben Sie sagen, dass und zu anderen Zeiten „Kein Zugriff auf eine geschlossene Textwriter„keine geschlossene Datei zugreifen kann“... (Was ist ein „Textwriter“?)
jedoch merkwürdig, hält die Datei ohne Probleme geschrieben werden. (Auch die „kann nicht eine geschlossene Datei zugreifen“ Nachricht wird in der vermeintlichen geschlossenen Datei geschrieben)
ich bin nicht vertraut mit der inneren Funktionsweise eines Timers. (Ich nehme an, es läuft ein sep arate Faden?)
Meine Frage ist
Ist es möglich, eine Stream von mehreren Threads zu verwenden? (in diesem Fall der Haupt und der Timer) Ist es möglich, dass es eine Race Condition oder ein solches Problem gibt?
Eine weitere Sache: Ich machte einen logischen Fehler und schließen und öffnen Sie die Datei jedes Mal, wenn ich auf sie schreiben wollen. Ja, es ist ein Fehler und ich sollte es korrigieren. Aber vielleicht, wenn ich das korrigiere, verschwindet der Fehler, den ich oben beschrieben habe, einen schwerwiegenderen Fehler.
Mein Verdacht ist, dass ich da bin Schließen und Öffnen der Datei jeder Mal, wenn ich auf sie zu schreiben, vielleicht die beiden Threads versuchen, werden sie auf eine falsche Zeit für den Zugriff auf
Jede Hilfe sehr
Zu einer Ihrer Fragen: Ein StreamWriter ist ein bestimmter TextWriter. –
Versuchen Sie eine Protokollimplementierung zu erstellen? Warum benutzt du nicht?NET-integrierte Diagnose-API oder eine Logging-Bibliothek wie log4net? Protokollierungsbibliotheken müssen Protokollanforderungen von mehreren Threads akzeptieren, schreiben jedoch alle Einträge korrekt, ohne die Protokolldatei zu beschädigen. –