2011-12-21 42 views
0

我有一個TreeView,有很多節點。我有一個後臺工作人員遍歷節點並添加節點,或更新Checked屬性。如果我將節點作爲參考傳遞給後臺線程(我使用SyncronizationContext類來更新在主線程上創建的控件),是否可以從後臺線程更新節點?只是好奇,如果我可以或不可以,因爲它是很多編程改變,如果我可以/不能從我的後臺線程做到這一點。從後臺更新TreeView節點線程引用

+0

調查['Control.Invoke'方法(http://msdn.microsoft。 COM/EN-US /庫/ zyzhdc6b.aspx),或['Control.BeginInvoke'](http://msdn.microsoft.com/en-us/library/system.windows.forms.control.begininvoke.aspx) 。 – 2011-12-21 16:24:05

+0

這又是一個適合虛擬控制 – 2011-12-21 16:25:42

回答

1

不能UI線程以外更新控制。但是您可以使用Application.Current.Dispatcher.Invoke(對於WPF)或Control.Invoke(對於WinForms)在UI線程上調用某個函數。你應該記住,這些操作將在主線程上執行,並且可以使你的應用程序沒有響應,如果你嘗試做一些耗時這裏

+0

我使用的SynchronizationContext類更新主線程....不記得在那裏我找到了另一條的情況,但代碼是這樣的: 私人只讀的SynchronizationContext synContext = new AsyncOperationManager.SynchronizationContext; 爲了進行調用,創建一個接受所需數據參數的方法,然後像這樣調用(來自backgroundworker線程) syncContext.Post(delegate {OnUpdateUIControl(argsForUpdate);},null); – ganders 2011-12-21 19:16:43

+0

你的代碼也應該可以正常工作(除非你的示例中不需要單詞「new」) – Natalia 2011-12-21 20:37:16

+0

哦,是的,錯過了......謝謝。 – ganders 2011-12-22 00:08:45