2011-04-25 4 views
4

J'ai cette méthode d'extension que j'utilise dans WinForms mais j'aimerais savoir comment je peux implémenter le même concept avec WPF.Accès générique WPF multithread aux contrôles

public static void SafeThreadAction<T>(this T control, Action<T> call) 
    where T : System.Windows.Forms.Control 
{ 
    if(control.InvokeRequired) 
    control.Invoke(call, control); 
    else 
    call(control); 
} 

Répondre

4

Je pense que la version WPF ressemblerait à ceci:

public static void SafeThreadAction<T>(this T control, Action<T> call) 
    where T : System.Windows.Threading.DispatcherObject 
{ 
    if (!control.Dispatcher.CheckAccess()) 
    control.Dispatcher.Invoke(call, control); 
    else 
    call(control); 
} 
+0

Gabe, je ne pense pas que vous devez le deuxième argument dans l'appel à Invoke(), puisque vous appelez déjà le répartiteur du contrôle . L'ajout de l'argument de priorité d'appel peut également être utile. – Alan

+0

@Alan: Le deuxième argument est requis car 'call' est une' Action 'et pas seulement une' Action'. – Gabe

+0

oh, vous avez absolument raison, idiot moi :) – Alan

Questions connexes