在.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上我看不到它们......
在不同时生成Y线程的情况下,在Silverlight中使这个工作最简单但仍然正确的方法是什么,因为Y可以是一个很大的值。它使用主机的可用CPU资源会很好......
谢谢!
答案 0 :(得分:3)
对于.NET4版本,最好使用Parallel.For
:
正是出于这种情况。
对于Silverlight,您可以自己开发,这里有一些代码可以帮助您入门:
请参阅标题为循环平铺的部分。