【发布时间】:2013-04-03 09:16:02
【问题描述】:
- 亚历山德拉·鲁西娜的系列。 .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 来到这个sn-p 时的引述:
- “为了让 UI 具有响应性,我将使用任务,这是任务并行库引入的一个新概念。任务表示通常在单独的线程上运行的异步操作” 李>
- “编译、运行……嗯,UI 是响应式的”
为了从那些单独的任务线程输出到 WPF UI(或避免 InvalidOperationException 说“调用线程无法访问此对象,因为不同的线程拥有它。”)使用了 Dispatcher.BeginInvoke()。
同一系列"Parallel Programming: Task Schedulers and Synchronization Context"的第二部分讲述了相同的sn-p代码(在引入局部迭代变量的小改动之后):
“这个需要更彻底的重构。我无法运行所有 UI 线程上的任务,因为它们执行长时间运行的操作 这将使我的用户界面冻结。此外,它将取消所有 并行化的好处,因为只有一个 UI 线程。
我能做的就是把每个任务分成……”
the part1-article 与 the part2-article 不矛盾吗?
将不在 UI 线程上运行的任务分成几部分有什么需要?
我在这里误解了什么?
【问题讨论】:
标签: c# wpf multithreading c#-4.0 task-parallel-library