【问题标题】:Cross-thread problems with .NET data binding.NET 数据绑定的跨线程问题
【发布时间】:2011-03-01 20:35:15
【问题描述】:

我有许多用于与我的程序对象交互的 Windows 窗体控件。目前,他们订阅对象上的“更新”事件,并在需要时手动更新值。我想使用数据绑定替换所有(或尽可能多)这个样板代码。

我遇到的问题是对象状态可以随时被几个不同线程中的任何一个修改。目前我使用 Invoke() 来处理这个问题,效果很好,但是当我切换到数据绑定时,我被非法的跨线程控制异常淹没了。有没有首选的方法来优雅地使用数据绑定来处理这个问题,还是我最好让事情保持现在的样子?

谢谢!

【问题讨论】:

  • 你能显示你之前和之后的代码吗?

标签: c# winforms multithreading data-binding


【解决方案1】:

如果您要将控件数据绑定到正在从底层线程更新的数据源,那么您必须通过调用 Invoke 将执行更新的代码移动到 UI 线程。

或者,如果您愿意,可以获得ISynchronizeInvoke 实现(或SynchronizationContext)并在 UI 线程上触发所有事件。当然,这可能会导致代码出现意外问题,因为您一开始并未在 UI 线程上触发事件。

【讨论】:

  • +1 用于使用SynchronizationContext - 正如您提到的,它可能会识别未知问题,但清理线程错误很少是一个坏主意
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多