【问题标题】:Best Practice: When to dispatch back to the UI Thread最佳实践:何时分派回 UI 线程
【发布时间】:2008-11-30 15:54:40
【问题描述】:

我有一个关于最佳做法的问题。当使用如下两个辅助加载方法时,何时是向 UI 发送回调的最佳时间? Button1 在返回时使用 Dispatcher,而 Button2 允许帮助加载类封装对 Dispatcher 的调用。我倾向于使用 Button2。

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

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-14
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 2011-06-09
      • 2014-06-14
      相关资源
      最近更新 更多