【发布时间】:2011-05-11 19:38:20
【问题描述】:
在 .Net 4 上的 WPF 中,我有一个类似的循环生成后台工作:
Point[] points = GetPoints();
List<Task> tasks = new List<Task>();
// loop bitmap
for (int x = 0; x < bitmap.Width; x++) {
for (int y = 0; y < bitmap.Height; y++) {
Task t = new Task((object point) => {
Point p = points[((Point)point).Y * bitmap.Width + ((Point)point).X];
p.CalculateInterference(); // a bit slow
}, new Point(x, y));
t.Start();
tasks.Add(t);
}
// after spawning tasks for all the Y column I need them to finish before proceeding
foreach (var t in tasks) {
t.Wait();
}
tasks.Clear();
}
使用 .NET4 中的 Task 类很容易,但在 Silverlight 3 上我看不到它们...
什么是最简单但仍然正确的方法可以在 Silverlight 中完成这项工作,而无需并行生成 Y 个线程,因为 Y 可能是一个很大的值。使用主机可用的CPU资源就好了……
谢谢!
【问题讨论】:
-
线程池?不过你必须自己做很多工作。
-
也许是 ThreadPool 但如何正确使用它与这个构造,我需要它们都在内循环之后完成。如果我将它们全部排入队列并在尚未安排很快在池中运行的线程上执行 Thread.Join,我基本上会阻塞直到它运行并杀死并行性的所有性能增益?还是我弄错了?
-
那肯定会做很多工作,这就是为什么我没有将其发布为“答案”;)
标签: c# .net wpf silverlight-3.0