4
我是Rx的新手,希望在當前項目中使用它。我正在嘗試實現一個文件觀察器系統。至少現在我只對文件創建事件感興趣。但是當我嘗試在代碼下運行時,我得到「Value can not be null error message」。 請有人幫助我與下面的代碼。如何使用反應式擴展實現filewatcher
class Program
{
static void Main(string[] args)
{
IDisposable writer = new FileSystemObservable(@"D:\Code\Rx\Dropbox\", "*.*", false)
.CreatedFiles
.Where(x => (new FileInfo(x.FullPath)).Length > 0)
.Select(x => x.Name)
.Subscribe(Console.WriteLine);
Console.ReadLine();
}
}
class FileSystemObservable
{
private readonly FileSystemWatcher fileSystemWatcher;
public FileSystemObservable(string directory, string filter, bool includeSubdirectories)
{
fileSystemWatcher = new FileSystemWatcher(directory, filter)
{
EnableRaisingEvents = true,
IncludeSubdirectories = includeSubdirectories
};
CreatedFiles = Observable.FromEventPattern<FileSystemEventHandler, FileSystemEventArgs>
(h => fileSystemWatcher.Created += h,
h => fileSystemWatcher.Created -= h)
.Select(x => new { x.EventArgs }) as IObservable<FileSystemEventArgs>;
Errors = Observable.FromEventPattern<ErrorEventHandler, ErrorEventArgs>
(h => fileSystemWatcher.Error += h,
h => fileSystemWatcher.Error -= h)
.Select(x => new { x.EventArgs }) as IObservable<ErrorEventArgs>;
}
public IObservable<ErrorEventArgs> Errors { get; private set; }
public IObservable<FileSystemEventArgs> CreatedFiles { get; private set; }
}
感謝李!現在錯誤消失了,我可以編譯程序。但是,我沒有得到創建的文件列表。 –
除了這個CreatedFiles和錯誤需要被定義爲IObservable>和IObservable > –
Dev
@NarayanAkhade - 它對我來說確實很好。我會直接訂閱觀察者的事件以確保它們按照您的預期進行提升,但我認爲您的觀測值已正確定義。 – Lee