2011-04-25 82 views
4

我有我在WinForms中使用的這種擴展方法,但想知道如何我可以用WPF實現相同的概念。通用WPF多線程訪問控件

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

回答

4

我認爲WPF的版本是這樣的:

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

加布,我不認爲你需要的第二個參數中進行的調用(),因爲你已經調用控件的調度。添加呼叫優先權參數也可能值得考慮。 – Alan 2011-04-25 08:42:11

+0

@Alan:第二個參數是必需的,因爲'call'是一個'Action '而不僅僅是一個'Action'。 – Gabe 2011-04-25 08:47:24

+0

哦,你是對的,傻我:) – Alan 2011-04-25 08:53:55