using System; using System.Collections.Generic; namespace MediaBrowser.Common.Progress { /// /// Class ActionableProgress /// /// public class ActionableProgress : IProgress, IDisposable { /// /// The _actions /// private readonly List> _actions = new List>(); public event EventHandler ProgressChanged; /// /// Registers the action. /// /// The action. public void RegisterAction(Action action) { _actions.Add(action); } /// /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } /// /// Releases unmanaged and - optionally - managed resources. /// /// true to release both managed and unmanaged resources; false to release only unmanaged resources. protected virtual void Dispose(bool disposing) { if (disposing) { _actions.Clear(); } } public void Report(T value) { if (ProgressChanged != null) { ProgressChanged(this, value); } foreach (var action in _actions) { action(value); } } } public class SimpleProgress : IProgress { public event EventHandler ProgressChanged; public void Report(T value) { if (ProgressChanged != null) { ProgressChanged(this, value); } } } }