質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

解決済

C#form マルチタスク処理でタスク数を制限してかつメインウインドウをフリーズさせない方法が知りたい。

samidare_chan
samidare_chan

総合スコア142

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

1回答

-4評価

0クリップ

399閲覧

投稿2022/05/23 09:24

編集2022/05/23 19:07

提示コードの///コメント部ですが処理をの数を制限するとウインドウがフリーズしてしまいます。これを回避するにはどうしたらいいのでしょうか?参考サイトのやり方ではフリーズしてしまいます。

知りたいこと

10個タスクを生成してそれが全部終わったらまた10個生成して実行という処理を作りたのですがこれをするにはどうやって終了を検知したらいいのでしょうか

参考サイト:https://www.ipentec.com/document/csharp-wait-task-complete-multiple#:~:text=WaitAll()%20%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%82%92%E5%88%A9%E7%94%A8,%E3%82%AF%E3%83%AD%E3%83%BC%E3%82%BA%E5%87%A6%E7%90%86%E3%82%92%E3%81%97%E3%81%BE%E3%81%99%E3%80%82

参考サイト:
https://www.ipentec.com/document/csharp-wait-task-complete-multiple#:~:text=WaitAll()%20%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%82%92%E5%88%A9%E7%94%A8,%E3%82%AF%E3%83%AD%E3%83%BC%E3%82%BA%E5%87%A6%E7%90%86%E3%82%92%E3%81%97%E3%81%BE%E3%81%99%E3%80%8

参考サイト:https://ufcpp.net/study/csharp/misc_task.html

cs

/* ########################### プレイリストを設定 非同期 ###########################*/ private async void setDataPlayList_Async(string url) { List<string> list = new List<string>(); Action job = () => { PlayList playlist = new PlayList(); list = playlist.getURL_List(url); //Debug.WriteLine("ID全取得"); }; await Task.Run(job); //非同期メソッドを実行 //setDataList_Async(list[0]); ///////////////////////////////////////////////////// foreach (string item in list) { setDataList_Async(item); } ///////////////////////////////////////////////////// Debug.WriteLine(list.Count()); } /* ########################### リストに設定 非同期 ###########################*/ public async void setDataList_Async(string u) { Func<Data?> job = () => { Data d = new Data(); d.setData(u); //フォーマットを設定 if (d.getFormat() != null) { data.Add(d); return d; } else { MessageBox.Show("URL ERROR: " + u,"", MessageBoxButtons.OK, MessageBoxIcon.Error); return null; } }; taskData.Add(Task.Run(job)); //非同期メソッドを実行 if(taskData.Count > total) { Task.WaitAll(taskData.ToArray()); total += 10; } /* //成功時 リストに代入 if (b != null) { Debug.WriteLine(b.getTitle()); checkedListBox_list.Items.Add(b.getTitle()); } else { Debug.WriteLine("null"); } */ }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

y_waiwai

2022/05/23 09:32

その参考サイトの通りにすればいいだけですが、なにがわからないんでしょうか
samidare_chan

2022/05/23 09:34

そのサイトのやり方だとウインドウがフリーズしていまうのです。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。