C#のタスクを配列にセットしようとして、インデックスの範囲外ですとエラーになってしまいました。
大きい画像を読み込むために、PictureBox配列にTaskを使用してセットしたいのですが、
おそらく、変数iの値がTask内の変数に反映されてしまい、Task完了前にTask内のiの値が変わってしまっているためエラーになっていると思われます。
Task内iの値はTask作成時の値のままにするにはどうすればいいでしょうか?
C#
1 try 2 { 3 PictureBox[] thumbnail = new PictureBox[5]; 4 int w = 100; 5 int h = 50; 6 7 Task[] tasks = new Task[thumbnail.Length]; 8 for (int i = 0; i < thumbnail.Length; i++) 9 { 10 tasks[i] = Task.Factory.StartNew(() => { 11 thumbnail[i] = new PictureBox(); 12 thumbnail[i].Size = new Size(w, h); 13 thumbnail[i].Image = new Bitmap(images[i].path); 14 }); 15 } 16 Task.WaitAll(tasks); 17 } 18 catch (Exception ex) 19 { 20 MessageBox.Show($"{ex.Message}"); 21 return false; 22 }
質問に対する直接の回答ではありませんが・・・
Main メソッドを static void Main() ⇒ static async Task Main() として、Task.Run に await を付与すれば期待通りに 1, 2, 3 ... の順になりませんか?
回答2件
あなたの回答
tips
プレビュー