jellyfin-server/MediaBrowser.Common/Progress/ActionableProgress.cs
2013-02-20 20:33:05 -05:00

64 lines
1.9 KiB
C#

using System;
using System.Collections.Generic;
namespace MediaBrowser.Common.Progress
{
/// <summary>
/// Class ActionableProgress
/// </summary>
/// <typeparam name="T"></typeparam>
public class ActionableProgress<T> : Progress<T>, IDisposable
{
/// <summary>
/// The _actions
/// </summary>
private readonly List<Action<T>> _actions = new List<Action<T>>();
/// <summary>
/// Registers the action.
/// </summary>
/// <param name="action">The action.</param>
public void RegisterAction(Action<T> action)
{
_actions.Add(action);
ProgressChanged -= ActionableProgress_ProgressChanged;
ProgressChanged += ActionableProgress_ProgressChanged;
}
/// <summary>
/// Actionables the progress_ progress changed.
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The e.</param>
void ActionableProgress_ProgressChanged(object sender, T e)
{
foreach (var action in _actions)
{
action(e);
}
}
/// <summary>
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
/// </summary>
public void Dispose()
{
Dispose(true);
}
/// <summary>
/// Releases unmanaged and - optionally - managed resources.
/// </summary>
/// <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
ProgressChanged -= ActionableProgress_ProgressChanged;
_actions.Clear();
}
}
}
}