public IObservable<FileSystemEventArgs> ObserveFolderChanges(string path, string filter, TimeSpan throttle)
{
Argument.IsNotNullOrWhitespace(() => path);
Argument.IsNotNullOrWhitespace(() => filter);
Argument.IsNotNull(() => throttle);
return Observable.Create<FileSystemEventArgs>(
observer =>
{
var fileSystemWatcher = new FileSystemWatcher(path, filter) {EnableRaisingEvents = true};
return Observable.FromEventPattern<FileSystemEventArgs>(fileSystemWatcher, "Changed")
.Select(ev => ev.EventArgs)
.Throttle(throttle)
.Finally(fileSystemWatcher.Dispose)
.Subscribe(observer);
}
);
}
#endregion