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); } } }