2014-02-16 8 views
-1

Как вы обновляете древовидную структуру из другого потока? Мое древовидное поведение действует как проводник и позволяет пользователю выбирать другую родительскую папку. Когда я пытаюсь изменить родителя из другого пользовательского интерфейса, ничего не происходит, угадывая, потому что он использует другой поток. Я читал несколько примеров, объясняющих использование «Invoke» и делегатов, но не могу заставить его работать.Изменение пути TreeView из другого потока C#

+0

Все пользовательские интерфейсы работают в основном потоке приложения, если только вы не создали новые потоки самостоятельно. – drankin2112

+0

Элементы управления размещены в usercontrol, который используется для создания палитры инструментов в AutoCAD. В палитре инструментов есть собственный ContextMenu, в котором я пытаюсь добавить методы для изменения библиотеки Treeview и т. Д. Если я просто вызову treeView.Nodes.Clear(); из toolPalette ничего не происходит, тогда как это отлично работает в usercontrol. Это заставило меня поверить, что это проблема с потоком. – matinau

ответ

0

Попробуйте сделать это. Контекст выполнения должен быть привязан к потоку пользовательского интерфейса.

treeView.HandleCreated += (s, a) => { 
    treeView.Invoke(new Action(() => treeView.Nodes.Clear())); 
}; 

Также попробуйте это из контекстного меню выбрать событие, используя метод Invoke вызывающего элемента управления.

Invoke(new Action(() => treeView.Nodes.Clear())); 
+0

Это привело к следующей ошибке: Invoke или BeginInvoke не могут быть вызваны в элементе управления до тех пор, пока не будет создан дескриптор окна. – matinau

+0

см. Мое обновление. Нет реальной причины для вызова Clear() в древовидной структуре, поскольку она создается, потому что она уже пуста. Я начинаю думать, что вы управляете не созданием, когда думаете, что это так. – drankin2112

+0

Извините, я просто использовал 'Clear();' в качестве примера – matinau

Смежные вопросы