2014-02-16 18 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