WPF和数据绑定在多线程ADO.NET应用程序中

时间:2009-08-18 08:21:02

标签: c# wpf multithreading data-binding ado.net

我需要建议和澄清。我目前正在开发一个需要在数据网格中显示数据库内容的监视器应用程序(我正在使用WPFToolkit网格btw)。网格绑定到我的ADO.NET DataSet中的表,它工作正常。如果我通过UI中的按钮修改DataSet,网格会更新并且每个人都很高兴(绑定和ADO.NET在this blog中很好地描述)。但是,数据库将由其他应用程序进行更新,并且监视器应用程序需要自动显示这些更改。通过轮询数据库来更新DataSet(由于各种原因,监听来自DB的post_events不适用),但更改不会显示在网格中。

据我所知,这是WPF数据绑定的一个特性。您无法从UI的其他线程更新源。在我看来,这是疯了。必须有数千个应用程序从其他用户或应用程序输入数据。我已经尝试使用Dispatcher将源的实际更新移动到UI线程,但我仍然得到相同的错误。

现在问我的问题:我的分析是否正确,如果是,你能就如何解决问题提出任何建议吗?另外,如果我的分析是正确的,有人可以尝试解释为什么WPF会这样运作吗?

感谢您的时间

2 个答案:

答案 0 :(得分:1)

很可能!不是你的问题的解决方案,但看看http://weblogs.asp.net/cschittko/archive/2008/05/14/wpf-ui-update-from-background-threads.aspx,它可能会给你一些更多的途径来看待。

另一个链接是wpf: update multiple controls via dispatcher

HTH

答案 1 :(得分:0)

在做了更多的研究后,我发现我的分析是正确的。虽然我还没有想出让它在ADO.NET中运行的方法,但我确实找到了一个使用ObservableCollection的简单派生的好解here

使用DataTable中的RowChanged事件,我跟踪表的BindableCollection视图,并将其用作我的DataContext。像魅力一样。