Преобразование потоков WPF в Silverlight - PullRequest
1 голос
/ 11 мая 2011

В WPF на .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();
        }

Это было легко с классом Task в .NET4, но в Silverlight 3 я их не вижу ...

Какой самый простой, но все же правильный способ сделать эту работу в Silverlight без параллельного создания Y-потоков, поскольку Y может иметь большое значение. Было бы хорошо, если бы он использовал доступные ресурсы процессора хоста ...

Спасибо!

1 Ответ

3 голосов
/ 12 мая 2011

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

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

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

См. Раздел, озаглавленный Loop Tiling .

...