gpt4 book ai didi

c# - 为什么拆分不在 UI 线程上运行的任务以使 WPF 应用程序更具响应性?

转载 作者:太空宇宙 更新时间:2023-11-03 21:48:22 25 4
gpt4 key购买 nike

part1 "Getting Started"

  • Alexandra Rusina 的系列作品。 .NET Framework 4 中的并行编程

为了使 WPF UI 响应,这是通过将密集计算外包给 UI 来完成的。最终,代码改为:

for (int i = 2; i < 20; i++)
{
var t = Task.Factory.StartNew(() =>
{
var result = SumRootN(i);
this.Dispatcher.BeginInvoke(new Action(() =>
textBlock1.Text += "root " + i.ToString() + " " +
result.ToString() + Environment.NewLine)
,null);
});
}

更新:因此将密集计算从 UI 线程中移出。

以下是来自 Part1 article 的引述来到这个片段:

  • “为了使 UI 具有响应性,我将使用任务,这是任务并行库引入的新概念。任务表示通常在单独线程上运行的异步操作”
  • “编译、运行……嗯,UI 是响应式的”

并且为了从这些单独的任务线程输出到 WPF UI(或避免 InvalidOperationException 表示“调用线程无法访问此对象,因为另一个线程拥有它。”),Dispatcher.BeginInvoke() 被使用。

同系列之二"Parallel Programming: Task Schedulers and Synchronization Context"讲述相同的代码片段(在引入局部迭代变量的小改动之后):

"This one requires more thorough refactoring. I can’t run all the tasks on the UI thread, because they perform long-running operations and this will make my UI freeze. Furthermore, it will cancel all parallelization benefits, because there is only one UI thread.

What I can do is to split each task into..."

没有the part1-articlethe part2-article矛盾?

将不在 UI 线程上运行的任务拆分成多个部分有何必要?

我在这里误解了什么?

最佳答案

我觉得这里有两个不同的概念。第 1 部分讨论在任务中运行代码以不阻塞 UI 线程。第 2 部分讨论了并行运行多个任务。一个用于“不阻塞 UI 线程”,另一个用于并行完成更多事情。如果您只有两个线程:UI 线程和任务线程,则事情不会并行发生,您也没有利用并行处理的真正威力。

关于c# - 为什么拆分不在 UI 线程上运行的任务以使 WPF 应用程序更具响应性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15762294/

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