質問編集履歴
3
質問文を元に戻しました。
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
C#form マルチタスク処理で
|
1
|
+
C#form マルチタスク処理でタスク数を制限してかつメインウインドウをフリーズさせない方法が知りたい。
|
test
CHANGED
@@ -1,11 +1,6 @@
|
|
1
|
-
提示コードの
|
1
|
+
提示コードの`///`コメント部ですが処理をの数を制限するとウインドウがフリーズしてしまいます。これを回避するにはどうしたらいいのでしょうか?参考サイトのやり方ではフリーズしてしまいます。
|
2
|
-
|
3
|
-
```
|
4
|
-
|
2
|
+
##### 知りたいこと
|
5
|
-
|
3
|
+
10個タスクを生成してそれが全部終わったらまた10個生成して実行という処理を作りたのですがこれをするにはどうやって終了を検知したらいいのでしょうか
|
6
|
-
|
7
|
-
```
|
8
|
-
|
9
4
|
|
10
5
|
参考サイト: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
|
11
6
|
|
2
文章を修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
C# マルチタスク処理で
|
1
|
+
C#form マルチタスク処理でcheckListBoxに値を入れる方法
|
test
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
-
提示コードのコメント部内部の関数なのですが`setDataList_Async(item);`関数が120個とかをマルチタスクされると動作が重くなるので
|
2
|
-
|
1
|
+
提示コードの `/* # リストに設定 非同期 #*/`部のコードの成功部コメント部ですがこれを非同期のデリゲート関数に入れると実行時エラーが発生するのですがこれはどうやって回避するのでしょうか?そもそもできないのでしょうか?読み込みながらリストを更新したいのですが?
|
3
2
|
|
4
|
-
|
3
|
+
```
|
5
|
-
|
4
|
+
System.InvalidOperationException:
|
5
|
+
'有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール 'checkedListBox_list' がアクセスされました。'
|
6
|
+
|
7
|
+
```
|
6
8
|
|
7
9
|
|
8
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
|
@@ -45,7 +47,7 @@
|
|
45
47
|
}
|
46
48
|
|
47
49
|
|
48
|
-
|
50
|
+
/* ########################### リストに設定 非同期 ###########################*/
|
49
51
|
public async void setDataList_Async(string u)
|
50
52
|
{
|
51
53
|
Func<Data?> job = () =>
|
@@ -67,13 +69,26 @@
|
|
67
69
|
|
68
70
|
};
|
69
71
|
|
70
|
-
Data
|
72
|
+
taskData.Add(Task.Run(job)); //非同期メソッドを実行
|
71
73
|
|
74
|
+
if(taskData.Count > total)
|
75
|
+
{
|
76
|
+
Task.WaitAll(taskData.ToArray());
|
77
|
+
total += 10;
|
78
|
+
}
|
79
|
+
|
80
|
+
/*
|
72
81
|
//成功時 リストに代入
|
73
82
|
if (b != null)
|
74
83
|
{
|
84
|
+
Debug.WriteLine(b.getTitle());
|
75
85
|
checkedListBox_list.Items.Add(b.getTitle());
|
76
86
|
}
|
87
|
+
else
|
88
|
+
{
|
89
|
+
Debug.WriteLine("null");
|
90
|
+
}
|
91
|
+
*/
|
77
92
|
}
|
78
93
|
|
79
94
|
```
|
1
文章を修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
提示コードのコメント部内部の関数なのですが`setDataList_Async(item);`関数が120個とかをマルチタスクされると動作が重くなるので
|
2
2
|
それを同時に10に制限して終わったらまた10個といった具合に処理を小刻みにの停止してかつウインドウ操作を可能にしたのですがこれをするにはどう検知するればいいのでしょうか?参考サイトはウインドウ操作がフリーズしてしまいます。
|
3
|
+
|
4
|
+
##### 知りたいこと
|
5
|
+
タスクが全部終わったかどうかを検知してそれでいてウインドウ操作を可能にするマルチタスクの実装方法
|
6
|
+
|
3
7
|
|
4
8
|
参考サイト: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
|
5
9
|
|