2011-05-11 3 views
1

В WPF на .Net 4 я имел подобный цикл нерест фона работы:WPF в Silverlight резьб преобразование

 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 может быть большим значением. Было бы хорошо, что он использует доступные ресурсы центрального процессора хоста ...

Спасибо!

+0

ThreadPool? Вы должны были бы сделать большую работу самостоятельно, хотя. – jv42

+0

Возможно, ThreadPool, но как правильно использовать эту конструкцию, мне нужно, чтобы все они были закончены после внутреннего цикла. Если я поставил их в очередь и сделаю Thread.Join в потоке, который еще не запланирован в ближайшее время для запуска в пуле, я бы блокировал его до тех пор, пока он не запустится и не убьет все преимущества параллелизма? или я ошибаюсь? –

+0

Это было бы очень много работы, поэтому я не публиковал это как «ответ»;) – jv42

ответ

3

Для версии .NET4 вы бы лучше использовать Parallel.For:

Именно для такого рода ситуации.

Для Silverlight вы можете вырастить свой собственный, и вот какой-то код, чтобы вы начали:

Смотрите раздел под названием Loop Черепица.

+0

отличные советы, я посмотрю на вторую ссылку. –

Смежные вопросы