2013-05-09 11 views
6

Vorrei leggere un file dopo che mi è stato notificato che è stata scritta una certa quantità di dati tramite un altro thread.

Il mio tentativo iniziale era di creare un soggetto reattivo nella mia classe Writer che chiama OnNext dopo la scrittura sul BinaryWriter con cui è composto. Questo BinaryWriter utilizza un FileStream.
Questo non sembra funzionare però. Presumo che non sia garantito che la Scrittura sia stata svuotata.

Preferisco non chiamare manualmente flush. Esiste un modo per farlo?Come posso generare le notifiche che i dati scritti tramite FileStream si trovano sul disco?

+4

Congratulazioni per aver fatto la domanda numero 5.000.000! – dasblinkenlight

+1

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

+0

Non c'è nessun premio per chi pone la domanda numerata 5.000.000 o successiva 6.000.000 o ...? Penso che valga la pena di ricevere 100 punti di reputazione. –

risposta

1

A un livello più ampio, stai chiedendo informazioni sulle comunicazioni tra i thread. Ci sono un paio di modi per gestirlo a seconda delle tue preferenze e dell'ambiente.

Se non lo si è già, controllare la filettatura POSIX here e here. Presta attenzione alle sezioni che trattano variabili condizionali o semafori.

Il framework .NET ha una libreria System Threading che vale anche la pena guardare oltre. In particolare, ha sia un semaforo che una classe di monitor. L'una o l'altra potrebbe essere la soluzione che ti serve in questo caso.

Infine, considerare l'interfaccia InotifyPropertyChanged e/o gli eventi. In questo contesto, è un percorso alternativo per segnalare il progresso del lettore.

In generale, si consiglia di fare in modo che il thread del writer lanci una notifica di modifica evento o generare un semaforo dopo aver scritto X byte. Da lì, il lettore catturerà l'evento o guarderà il semaforo e agirà di conseguenza.

Ho il sospetto che la classe di monitoraggio non sarà così utile per voi poiché il blocco probabilmente impedirà l'accesso simultaneo al file.

Problemi correlati