NET数据绑定的跨线程问题
作者:互联网
我有许多用于与程序对象进行交互的Windows窗体控件.当前,他们订阅对象上的“更新”事件,并在需要时手动更新值.我想使用数据绑定替换所有(或尽可能多的)此样板代码.
我遇到的问题是,随时可以通过几个不同线程中的任何一个来修改对象状态.当前,我使用Invoke()处理此问题,效果很好,但是当我切换到数据绑定时,我会被非法的跨线程控制异常所淹没.是否有首选的方法可以使用数据绑定来优雅地处理此问题,还是我最好还是按照现在的样子来处理?
谢谢!
解决方法:
如果将控件绑定到要从基础线程更新的数据源,则必须通过调用Invoke
将完成更新的代码移至UI线程.
或者,如果需要,您可以获取ISynchronizeInvoke
实现(或SynchronizationContext
),并使所有事件在UI线程上触发.当然,这可能会导致代码意外问题,因为您一开始就没有在UI线程上触发事件.
标签:multithreading,data-binding,c,winforms 来源: https://codeday.me/bug/20191210/2098463.html