NET数据绑定的跨线程问题

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

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

谢谢!

解决方法:

如果将控件绑定到要从基础线程更新的数据源,则必须通过调用Invoke将完成更新的代码移至UI线程.

或者,如果需要,您可以获取ISynchronizeInvoke实现(或SynchronizationContext),并使所有事件在UI线程上触发.当然,这可能会导致代码意外问题,因为您一开始就没有在UI线程上触发事件.

上一篇:在.NET WinForms中获取MFC Feature Pack GUI元素


下一篇:c#-滚动到WebBrowser控件的顶部