У меня серьезная досадная проблема, на которую я тратил смехотворное количество времени, пытаясь решить ее, но до сих пор безрезультатно !!
За эти годы я никогда не использовал стандартное древовидное представление, которое поставляется с .NET, поскольку я всегда использовал сторонний компонент, но пока говорю о неудачном опыте !!!
Короче говоря, я загружаю свои диски, а затем при расширении диска я перечисляю папки и так далее ... Ничего нового здесь, но у меня есть 2 основные проблемы:
Когда все ветки свернуты, дважды запускается событие до и после расширения. BeforeExpand x 2, затем AfterExpand x 2.
Когда раскрываются несколько ветвей, это вызовет событие 2 для каждой развернутой ветви ... Как будто я вызываю какой-то рекурсивный код, когда я не ... Так, например,
Развернуть C -> Триггеры BeforeExpand x 2, затем AfterEvent x 2 - Оставить его развернутым
Развернуть E -> Триггеры BeforeExpand x 2 для E, затем AfterEvent x 2, а затем делает это снова для C - Оставьте E расширенным.
Разверните F -> Триггеры BeforeExpand x 2 для F, затем AfterEvent x 2, затем сделайте это снова для E, затем C.
Это не имеет смысла !!
Код мудрый:
Инициализируйте BeforeExpand и AfterExpand, когда моя форма инициализируется, т.е.
treeView1.BeforeExpand += new TreeViewCancelEventHandler(treeView1_BeforeExpand);
treeView1.AfterExpand += new TreeViewEventHandler(treeView1_AfterExpand);
Когда я раскрываю узел, вызывается фоновый поток, который загружает диски или папки. Из фонового рабочего потока я вызываю функцию, которая обрабатывает проблему кросс-потоков, снова вызывая делегат, ничего особенного
У меня нет идей относительно того, что является причиной того, что этот бар может быть ошибкой со стороны MS, но я сомневаюсь в этом ... Это похоже на проблему, которая слишком очевидна.
Я рад опубликовать свой код, если это необходимо, так как это было просто фиктивное тестовое приложение, которое я запустил, и, возможно, вы заметите что-то, что я сделал неправильно, но я просто не вижу, что.
Надеюсь, кто-то имеет представление о том, что вызывает это.
Спасибо.
Thierry.