2011-05-11 65 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