【问题标题】:Update TreeView node from background thread by reference通过引用从后台线程更新 TreeView 节点
【发布时间】:2011-12-21 16:22:33
【问题描述】:

我有一个包含许多节点的 TreeView。我有一个后台工作人员遍历节点并添加节点或更新 Checked 属性。如果我将节点作为参考传递给后台线程,是否可以从后台线程更新节点(我正在使用 SyncronizationContext 类来更新在主线程上创建的控件)?只是好奇我是否可以,因为如果我可以/不能从我的后台线程中做到这一点,那么编程会发生很大变化。

【问题讨论】:

标签: c# multithreading backgroundworker


【解决方案1】:

您无法在 UI 线程之外更新控件。但是您可以使用Application.Current.Dispatcher.Invoke(用于 WPF)或Control.Invoke(用于 WinForms)在 UI 线程上调用某些函数。您应该记住,这些操作将在主线程上执行,如果您在这里尝试做一些耗时的事情,可能会使您的应用程序无响应

【讨论】:

  • 我正在使用 Synchronizationcontext 类来更新主线程....不记得我在哪里找到了这篇文章,但代码是这样的:private readonly SynchronizationContext synContext = new AsyncOperationManager。同步上下文;要进行调用,请创建一个接受所需数据参数的方法,然后像这样(从后台工作线程)调用 syncContext.Post(delegate { OnUpdateUIControl(argsForUpdate); }, null);
  • 您的代码也应该可以正常工作(除了您的示例中不需要“新”一词)
猜你喜欢
  • 2011-12-25
  • 2012-04-24
  • 2013-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多