【问题标题】:WPF and databinding in a multi threaded ADO.NET app多线程 ADO.NET 应用程序中的 WPF 和数据绑定
【发布时间】:2009-08-18 08:21:02
【问题描述】:

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

据我了解,这是 WPF 数据绑定的一个特性。您不能从 UI 之外的其他线程更新源。在我看来,这太疯狂了。必须有成千上万的应用程序从其他用户或应用程序输入数据。我尝试使用 Dispatcher 将源的实际更新移动到 UI 线程,但我仍然得到同样的错误。

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

感谢您的宝贵时间

【问题讨论】:

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


    【解决方案1】:

    大概吧!不是解决您问题的方法,但请看这里http://weblogs.asp.net/cschittko/archive/2008/05/14/wpf-ui-update-from-background-threads.aspx,它可能会为您提供更多查看途径。

    另一个链接在这里wpf: update multiple controls via dispatcher

    HTH

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-05
        • 1970-01-01
        • 2011-04-29
        • 1970-01-01
        • 2011-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多