Dispatcher和TaskSchduler之间的区别

时间:2014-06-24 15:12:41

标签: wpf c#-5.0

在WPF中,Dispatcher和taskscheduler都有助于将值从后台线程传递到UI线程。那真的是它们之间有什么区别。 例如,在下面的代码中,选项1和选项2

之间的实际差异是什么
        Task<int> tsk = Task<int>.Factory.StartNew(TestMethod);
        var threadSchedulder = TaskScheduler.FromCurrentSynchronizationContext();

        //Option 1
        tsk.ContinueWith((t) =>
            {
                SetText(tsk.Result);
            }, threadSchedulder);

        //Option 2
        this.Dispatcher.Invoke(() =>
        {
            SetText(tsk.Result);
        });

1 个答案:

答案 0 :(得分:0)

两者都会做同样的事情并且会有自己的优势。

Dispatcher.BeginInvoke():只是在UI线程上更新某些内容 Dispatcher.BeginInvoke 是最佳选择。通常,这是为了使用在后台线程上执行的某些操作的结果来更新某些UI控件。 Dispatcher.Invoke调用将阻塞,直到此操作完成。我们不应该在这里执行冗长的操作。

Dispatcher.BeginInvoke( () =>{myLabel.Text = "myText"});

Task.Factory.StartNew():将多个任务组合在一起时非常有用。这使得依赖于先前任务的调度工作变得更加简单,因为您可以使用Task.WaitAll / Task.WaitAny以及continuation。