2010-06-09 58 views
3

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

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

谢谢!

+0

你可以显示你的代码之前和之后。 – ChrisF 2010-06-09 19:42:10

回答

3

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

或者,如果你愿意,你可以得到一个ISynchronizeInvoke实现(或SynchronizationContext),并有在UI线程上的所有事件火灾。当然,这可能会导致您的代码出现意想不到的问题,因为您并未首先在UI线程上触发事件。

+0

+1使用'SynchronizationContext' - 正如你提到它可能会识别未知的问题,但清理线程错误很少是一个坏主意 – STW 2010-06-09 20:47:10