ツリー ビュー コントロールの AfterCheck イベントは、その下にあるすべての子ノードをチェックし、何かがチェックされている場合は [実行] ボタンを有効にします。
1346 void TreeNode_AfterCheck(object sender, TreeViewEventArgs e) {
1347 if (!e.Node.Checked) return;
1348 foreach (TreeNode sub in e.Node.Nodes) {
1349 sub.Checked = e.Node.Checked;
1350 }
1351 RunButton.Enabled = IsANodeChecked();
1352 }
1429 static bool IsANodeChecked(TreeNode node) {
1430 if (node.Checked) return true;
1431 foreach (TreeNode sub in node.Nodes) {
1432 if (IsANodeChecked(sub)) {
1433 return true;
1434 }
1435 }
1436 return false;
1437 }
4881 個のサブノードがある場合にルート ノードをチェックすると、GUI が約 7 秒間ハングします。
IsANodeChecked (1351 行目) を 1 回呼び出すだけで済みますが、すべてのツリー ノードが処理されるまで無効にする方法がわかりません。
そして、これを監視するためのタイマーをフォームに付けたくありません。
単純な/明白な解決策を見ている人はいますか?