2013-05-09 6 views
6

Ich möchte eine Datei lesen, nachdem ich benachrichtigt wurde, dass eine bestimmte Menge von Daten über einen anderen Thread dorthin geschrieben wurde.

Mein ursprünglicher Versuch war, ein reaktives Thema in meiner Writer-Klasse zu erstellen, die OnNext nach dem Write zu dem BinaryWriter aufruft, mit dem es zusammengesetzt wird. Dieser BinaryWriter verwendet einen FileStream.
Das scheint jedoch nicht zu funktionieren. Ich gehe davon aus, dass ich nicht garantieren kann, dass der Write gelöscht wurde.

Ich würde lieber nicht flush manuell aufrufen. Gibt es einen bestehenden Weg dies zu tun?Wie kann ich Benachrichtigungen generieren, dass Daten, die über einen FileStream geschrieben werden, auf dem Datenträger sind?

+4

Herzlichen Glückwunsch zum Stellen der Frage Nummer 5.000.000! – dasblinkenlight

+1

Hilft [File System Watcher] (http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx)? – Elias

+0

Gibt es keinen Preis dafür, wer die Frage mit 5.000.000 oder 6.000.000 oder ... stellt? Ich denke, er/sie sollte es wert sein, 100 Punkte Ansehen zu erhalten. –

Antwort

1

Auf einer breiteren Ebene, fragen Sie über die Kommunikation zwischen Threads. Je nach Vorlieben und Umgebung gibt es mehrere Möglichkeiten, dies zu handhaben.

Wenn Sie noch nicht haben, schauen Sie über POSIX Threading here und here. Beachten Sie die Abschnitte über bedingte Variablen oder Semaphoren.

Das .NET Framework hat eine System Threading Bibliothek, die auch einen Blick wert ist. Insbesondere hat es sowohl eine Semaphor- als auch eine Monitor-Klasse. Der eine oder andere kann die Lösung sein, die Sie in diesem Fall benötigen.

Schließlich betrachten Sie die InotifyPropertyChanged Schnittstelle und/oder Ereignisse. In diesem Kontext ist es eine alternative Route, um dem Leser Fortschritte zu signalisieren.

Im Allgemeinen würde ich empfehlen, dass Ihr Writer-Thread eine Benachrichtigung über geänderte Ereignisse auslöst oder nach dem Schreiben von X-Bytes einen Semaphor auslöst. Von dort wird der Leser entweder das Ereignis abfangen oder nach dem Semaphor Ausschau halten und entsprechend handeln.

Ich vermute, die Monitor-Klasse wird nicht so nützlich für Sie sein, da das Sperren wahrscheinlich den gleichzeitigen Zugriff auf die Datei verhindern wird.

Verwandte Themen