gpt4 book ai didi

wpf - Dispatcher 和 TaskSchduler 的区别

转载 作者:行者123 更新时间:2023-12-05 07:58:36 31 4
gpt4 key购买 nike

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

最佳答案

两者将做几乎相同的事情,并且各有优势。

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

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

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

关于wpf - Dispatcher 和 TaskSchduler 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24390283/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com