2
for (int j = 0; j < 10; j++)
{
    for (long i = 0; i < bound / 10; i++)
    {
        routeLine.Locations.Add(new Location
        {
            Latitude = ((BingMapsRESTService.Route)(r.ResourceSets[0].Resources[0])).RoutePath.Line.Coordinates[k][0],
            Longitude = ((BingMapsRESTService.Route)(r.ResourceSets[0].Resources[0])).RoutePath.Line.Coordinates[k][1]
        });

        k++;
    }

    await Task.Delay(TimeSpan.FromMilliseconds(1));

    Temp("Drawing Route (" + ((j * 10)/2).ToString() + "%)"); // to show progress,Temp sets text property of a textbox
}

Bound の値は 6000 から 10000 の間です。このループには時間がかかり、UI がハングするため、ループを 10 の部分に分割して task.delay を使用しました。10 個のループすべてを並行して実行することは可能ですか? 新しいスレッドで Location クラスのオブジェクトを作成できないため、スレッドを使用できません。タスクが別のスレッドによってマーシャリングされているというエラーをスローします

4

1 に答える 1

4

はい、可能です。Parallel.ForEachTPL と以下を使用できます。

TPL

Parallel.ForEach

于 2012-11-29T10:23:58.967 に答える