提示コードの///
コメント部ですが処理をの数を制限するとウインドウがフリーズしてしまいます。これを回避するにはどうしたらいいのでしょうか?参考サイトのやり方ではフリーズしてしまいます。
知りたいこと
10個タスクを生成してそれが全部終わったらまた10個生成して実行という処理を作りたのですがこれをするにはどうやって終了を検知したらいいのでしょうか
参考サイト:https://ufcpp.net/study/csharp/misc_task.html
cs
1 2 /* ########################### プレイリストを設定 非同期 ###########################*/ 3 private async void setDataPlayList_Async(string url) 4 { 5 List<string> list = new List<string>(); 6 7 Action job = () => 8 { 9 PlayList playlist = new PlayList(); 10 11 12 list = playlist.getURL_List(url); 13 14 //Debug.WriteLine("ID全取得"); 15 16 17 }; 18 19 await Task.Run(job); //非同期メソッドを実行 20 21 //setDataList_Async(list[0]); 22 23 ///////////////////////////////////////////////////// 24 foreach (string item in list) 25 { 26 setDataList_Async(item); 27 } 28 ///////////////////////////////////////////////////// 29 Debug.WriteLine(list.Count()); 30 } 31 32 33 /* ########################### リストに設定 非同期 ###########################*/ 34 public async void setDataList_Async(string u) 35 { 36 Func<Data?> job = () => 37 { 38 Data d = new Data(); 39 d.setData(u); //フォーマットを設定 40 41 if (d.getFormat() != null) 42 { 43 data.Add(d); 44 return d; 45 } 46 else 47 { 48 MessageBox.Show("URL ERROR: " + u,"", MessageBoxButtons.OK, MessageBoxIcon.Error); 49 return null; 50 } 51 52 53 }; 54 55 taskData.Add(Task.Run(job)); //非同期メソッドを実行 56 57 if(taskData.Count > total) 58 { 59 Task.WaitAll(taskData.ToArray()); 60 total += 10; 61 } 62 63 /* 64 //成功時 リストに代入 65 if (b != null) 66 { 67 Debug.WriteLine(b.getTitle()); 68 checkedListBox_list.Items.Add(b.getTitle()); 69 } 70 else 71 { 72 Debug.WriteLine("null"); 73 } 74 */ 75 } 76
その参考サイトの通りにすればいいだけですが、なにがわからないんでしょうか
そのサイトのやり方だとウインドウがフリーズしていまうのです。
回答1件
あなたの回答
tips
プレビュー