我有许多用于与程序对象交互的Windows窗体控件。当前,它们订阅对象上的“更新”事件,并在需要时手动更新值。我想使用数据绑定替换所有(或尽可能多)这个样板代码。
我遇到的问题是,对象状态可以随时被几个不同线程中的任何一个修改。目前我使用invoke()来处理这个问题,这很好,但是当我切换到数据绑定时,我会被非法的跨线程控制异常所淹没。有没有一种更好的方法可以使用数据绑定优雅地处理这个问题,或者我最好还是把事情按现在的方式处理好?
谢谢!
如果是将控件绑定到从基础线程更新的数据源的数据,则必须通过调用 Invoke .
Invoke
或者,如果你愿意,你 能够 得到一个 ISynchronizeInvoke 实施(或 SynchronizationContext )并在UI线程上触发所有事件。当然,这可能会导致代码出现意外问题,因为您一开始并没有在UI线程上触发事件。
ISynchronizeInvoke
SynchronizationContext