Если у вас действительно есть циклическая ссылка, то вы получите переполнение стека, которое невозможно отловить Попробуйте изменить код, чтобы избавиться от рекурсии:
// checkBox checked event handler
checkAllParents(node);
private void checkAllParents(TreeNode node)
{
var parent = node.Parent;
while (parent != null) {
{
parent.Checked = true;
parent = parent.Parent;
}
}
Если приложение входит в бесконечный цикл, у вас есть круговая ссылка. Вы можете дополнительно изменить код, чтобы перехватывать циклические ссылки:
private void checkAllParents(TreeNode node)
{
var parent = node.Parent;
var visitedNodes = new List<TreeNode>();
while (parent != null)
{
if (visitedNodes.Contains(parent))
throw new InvalidOperationException("Circular reference!");
visitedNodes.Add(parent);
parent.Checked = true;
parent = parent.Parent;
}
}
Конечно, это не подходящее место для обработки циклических ссылок. Но если это поможет ..