2014-02-16 17 views
-1

如何从另一个线程更新树视图?我的树视图就像资源管理器,并允许用户选择不同的父文件夹。当我尝试从不同的UI更改父项时,没有任何反应,因为它使用了不同的线程而进行猜测。 我读过多个示例,解释了“调用”和委托的使用,但无法使其工作。从另一个线程更改TreeView路径C#

+0

所有的UI都在应用程序的主线程中运行,除非您自己创建了新线程。 – drankin2112

+0

控件位于用户控件中,该控件用于在AutoCAD中创建工具调色板。工具调色板有它自己的ContextMenu,这是我试图添加方法来改变树视图库等...如果我只是调用treeView.Nodes.Clear();从toolPalette没有任何反应,而这在usercontrol内工作正常。这导致我相信这是一个线程问题 – matinau

回答

0

试着这样做。执行上下文必须封送到UI线程。

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

此外,请使用调用控件的Invoke方法从上下文菜单中选择事件。

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

这返回了以下错误:调用或BeginInvoke无法在控件上调用,直到已创建窗口句柄 – matinau

+0

看到我的更新。在树形视图中调用Clear()并没有真正的理由,因为它已经是空的了。我开始认为你的控制权在你认为是没有被创造出来的时候。 – drankin2112

+0

对不起,我只是用'Clear();'作为例子 – matinau