public ObservableFileSystemWatcher(string path, string filter = null) { _fileSystemWatcher = string.IsNullOrWhiteSpace(filter) ? new FileSystemWatcher(path) : new FileSystemWatcher(path, filter); Changed = Observable.FromEventPattern<FileSystemEventHandler, FileSystemEventArgs> (h => (s, e) => h(s, e), h => _fileSystemWatcher.Changed += h, h => _fileSystemWatcher.Changed -= h) .Select(e => e.EventArgs); Created = Observable.FromEventPattern<FileSystemEventHandler, FileSystemEventArgs> (h => (s, e) => h(s, e), h => _fileSystemWatcher.Created += h, h => _fileSystemWatcher.Created -= h) .Select(e => e.EventArgs); Deleted = Observable.FromEventPattern<FileSystemEventHandler, FileSystemEventArgs> (h => (s, e) => h(s, e), h => _fileSystemWatcher.Deleted += h, h => _fileSystemWatcher.Deleted -= h) .Select(e => e.EventArgs); Errors = Observable.FromEventPattern<ErrorEventHandler, ErrorEventArgs> (h => (s, e) => h(s, e), h => _fileSystemWatcher.Error += h, h => _fileSystemWatcher.Error -= h) .Select(e => e.EventArgs); Renamed = Observable.FromEventPattern<RenamedEventHandler, RenamedEventArgs> (h => (s, e) => h(s, e), h => _fileSystemWatcher.Renamed += h, h => _fileSystemWatcher.Renamed -= h) .Select(e => e.EventArgs); _fileSystemWatcher.DisposeWith(this); }