Как в C# предотвратить срабатывание события, вызывающего собственное событие?

У меня есть дерево просмотра с флажками, и у меня есть следующий обработчик для события "AfterCheck":

private void trvAvailableFiles_AfterCheck(object sender, TreeViewEventArgs e)
{
    if (!_isCheckingInProgress)
    {
        trvAvailableFiles.BeginUpdate();

        var nodePath = e.Node.Tag.ToString();
        bool isChecked = e.Node.Checked;
        e.Node.Nodes.Clear();

        try
        {
            _fileTreeLogic.GetChildNodes(e.Node, true);
            e.Node.ExpandAll();

            _isCheckingInProgress = true;
            SetChildrenCheckState(e.Node, isChecked);
            _isCheckingInProgress = false;

        }
        finally
        {
            trvAvailableFiles.EndUpdate();
        }
    }
}

Если вы внимательно посмотрите, то увидите, что я проверяю, есть ли "_isCheckingInProgress". Если это не так, то я разворачиваю все узлы и вызываю метод SetChildrenCheckState(). Проблема, с которой я столкнулся, заключается в том, что SetChildrenCheckState() впоследствии заставит каждый дочерний узел вызвать событие AfterCheck для своего узла.

Мой вопрос в том, есть ли более чистый способ разрешить срабатывание первого события AfterCheck, но не последующих? Это кажется хакерским, что я должен иметь переменную bool для проверки и установки.

5
задан Abel 8 November 2011 в 20:27
поделиться