using System;
using System.Windows.Threading;
namespace Developpez.Dotnet.Windows.Threading
{
///
/// Fournit des méthodes d'extension pour la classe Dispatcher
///
public static class DispatcherExtensions
{
///
/// Exécute l'action spécifiée directement si le thread courant est celui du Dispatcher,
/// sinon exécute l'action sur le Dispatcher à l'aide de Dispatcher.Invoke.
///
/// Le dispatcher à utiliser
/// L'action à exécuter
public static void InvokeIfRequired(this Dispatcher dispatcher, Action action)
{
dispatcher.InvokeIfRequired(DispatcherPriority.Normal, action);
}
///
/// Exécute l'action spécifiée directement si le thread courant est celui du Dispatcher,
/// sinon exécute l'action sur le Dispatcher à l'aide de Dispatcher.Invoke.
///
/// Le type du paramètre de l'action
/// Le dispatcher à utiliser
/// L'action à exécuter
/// L'argument à passer à l'action
public static void InvokeIfRequired(this Dispatcher dispatcher, Action action, T arg)
{
dispatcher.InvokeIfRequired(DispatcherPriority.Normal, action, arg);
}
///
/// Exécute l'action spécifiée directement si le thread courant est celui du Dispatcher,
/// sinon exécute l'action sur le Dispatcher à l'aide de Dispatcher.Invoke.
///
/// Le dispatcher à utiliser
/// La priorité avec laquelle exécuter l'action
/// L'action à exécuter
public static void InvokeIfRequired(this Dispatcher dispatcher, DispatcherPriority priority, Action action)
{
if (dispatcher.CheckAccess())
action();
else
dispatcher.Invoke(action);
}
///
/// Exécute l'action spécifiée directement si le thread courant est celui du Dispatcher,
/// sinon exécute l'action sur le Dispatcher à l'aide de Dispatcher.Invoke.
///
/// Le type du paramètre de l'action
/// Le dispatcher à utiliser
/// La priorité avec laquelle exécuter l'action
/// L'action à exécuter
/// L'argument à passer à l'action
public static void InvokeIfRequired(this Dispatcher dispatcher, DispatcherPriority priority, Action action, T arg)
{
if (dispatcher.CheckAccess())
action(arg);
else
dispatcher.Invoke(action, arg);
}
}
}