2011-05-11 67 views
1

在WPF我有一个类似环产卵后台工作:WPF Silverlight的.Net的4线程转换

 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任务类,但在Silverlight 3中我没有看到他们...

什么是最简单但仍然正确的方式来使这项工作在Silverlight中没有并行产生Y线程,因为Y可以是一个很大的值。这将是好事它使用主机的可用CPU资源...

谢谢!

+0

ThreadPool?尽管如此,你还得自己做很多工作。 – jv42 2011-05-11 19:48:48

+0

也许是ThreadPool,但是如何正确使用这个构造,我需要它们在内部循环之后完成。如果我排队所有的人做对的Thread.join是尚未安排很快就在游泳池我就基本上阻塞,直到它得到运行,并杀死并行的所有性能增益要运行的线程?还是我误会了? – 2011-05-11 20:00:25

+0

这肯定会有很多工作,这就是为什么我没有发布这个'答案';) – jv42 2011-05-12 08:07:00

回答

3

对于.NET4版本,你会使用Parallel.For会更好:

正是针对这种情况。

为Silverlight可以增加自己的,这里是一些代码,让你开始:

,请参阅标题环平铺部分。

+0

伟大的提示,我会看看第二个链接。 – 2011-05-11 20:08:04