2008-11-30 33 views
0

我有一个关于最佳实践的问题。在使用下面两种帮助程序加载方法时,什么时候是最好的时间来调用回调用户界面? Button1在返回时使用Dispatcher,Button2允许帮助器加载类在分派器上封装调用。我倾向于Button2。最佳实践:何时返回UI线程

private void Button1_Click(object sender, RoutedEventArgs e) 
{ 
    AsyncLoader.LoadAsyncWithoutDispatcher(delegate(string result) 
    { 
     this.Dispatcher.Invoke((Action)delegate { this.TextBox1.Text = result; }); 
    }); 
} 

private void Button2_Click(object sender, RoutedEventArgs e) 
{ 
    AsyncLoader.LoadAsyncWithDispatcher(this.Dispatcher, delegate(string result) 
    { 
     this.TextBox1.Text = result; 
    }); 
} 

class AsyncLoader 
{ 
    public static void LoadAsyncWithoutDispatcher(Action<string> completed) 
    { 
     var worker = new AsyncClass(); 
     worker.BeginDoWork(delegate(IAsyncResult result) 
     { 
      string returnValue = worker.EndDoWork(result); 
      completed(returnValue); 
     }, null); 
    } 

    public static void LoadAsyncWithDispatcher(Dispatcher dispatcher, Action<string> completed) 
    { 
     var worker = new AsyncClass(); 
     worker.BeginDoWork(delegate(IAsyncResult result) 
     { 
      string returnValue = worker.EndDoWork(result); 
      dispatcher.Invoke(completed, returnValue); 
     }, null); 
    } 
} 

回答

0

如果代码是通用的并且对WPF基础结构不太严格,那么第一种方法肯定是更通用的,因为它完全忽略了调度程序对象的使用。如果您的类与WPF紧密集成,则第二种方法更好,因为您必须使用Dispatcher调用该方法。在第一种方法中,可能根本不指定调度程序。这当然不是WPF推荐的东西。