private void updateTimer_Tick(object sender, EventArgs e) { foreach (var node in treeView1.Nodes.Cast <TreeNode>().ToArray()) { try { var pr = node.Tag as Process; if (pr == null || pr.HasExited) { treeView1.Nodes.Remove(node); } else { foreach (var subNode in node.Nodes.Cast <TreeNode>().ToArray()) { try { var spr = subNode.Tag as Process; if (spr == null || spr.HasExited) { node.Nodes.Remove(subNode); } } catch (Exception ex) { Console.WriteLine(ex); node.Nodes.Remove(subNode); } } } } catch (Exception ex) { Console.WriteLine(ex); treeView1.Nodes.Remove(node); } } if (treeView1.Nodes.Count <= 0) { AllProcessesClosed?.Invoke(sender, e); } else { _timer.Start(); } }
private void buttonIgnore_Click(object sender, EventArgs e) { AllProcessesClosed?.Invoke(sender, e); }