wpf mvvm threading.Timer 和 TimerCallback 问题

标签 wpf mvvm timer callback collectionviewsource

我有一个针对 MVVM 框架开发的 WPF 应用程序,其中 ViewModel 构造函数设置了一个带有 TimerCallback 的 Timer。

TimerCallback 检索 ObservableCollection 并将其传递给 VM 上的字段。

我有一个 CollectionViewSource,它的 Source 属性设置为 ObservableCollection。我正在使用 CollectionViewSource,因为我想对 Collection 启用过滤。

我发现当 TimerCallback 尝试将 ObservableCollection 传递到本地字段时,CollectionViewSource 的 Source 属性出现异常{“调用线程无法访问此对象,因为不同的线程拥有它。”}。

我理解这个异常(exception),但我有两个问题:

  • 如何解决这个问题?
  • 更重要的是,为什么我只在使用 CollectionViewSource 时才会遇到这个问题?如果我删除 CollectionViewSource 并使 ObservableCollection 成为公共(public)属性,那么我不会得到这样的异常。

  • 任何帮助表示赞赏!谢谢,
    德拉米

    最佳答案

  • 使用 DispatcherTimer而不是您现在使用的计时器类,并确保在 UI 线程上创建它。
  • 可能只有 ObservableCollection您的用户界面未更新。
  • 关于wpf mvvm threading.Timer 和 TimerCallback 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5953087/

    相关文章:

    c# - 无法在 WPF 中绑定(bind)动态生成的按钮和文本框

    wpf - Caliburn Micro 'Enter' 关键事件

    wpf - WPF 中的双向绑定(bind)

    wpf - 我可以从工作线程初始化 ViewModel 吗?

    c# - 使 Command 的 CanExecute 依赖于其他字段的值

    c - C中的运行时限制计时器

    java - 我如何等待 Java 计时器完成

    Python - tkinter Canvas 中的倒计时器

    .net - WPF:如何使用嵌套(分层)控件实现拖放

    c# - 如何在 WPF MVVM 应用程序中组织接口(interface)和实现