WPF:UI 控件必须在 UI 线程更新 Dispatcher.Invoke

TextBlock 确实是一个 UI 控件,它绑定了 CurrentWaferId。

但按照"UI 控件必须在 UI 线程更新"的规则,CurrentWaferId 的赋值也应该需要 Dispatcher.Invoke,但为什么不需要呢?

总结对比

属性 赋值方式 更新机制 是否需要 Dispatcher
CurrentWaferId 字符串赋值 PropertyChanged → WPF 自动调度到 UI 线程 ❌ 不需要
BottomBorderColor 创建 Brush 对象并赋值 直接操作 DependencyProperty 的 SetValue ✅ 必须 (Brush 创建不在 UI 线程)
AddLog(DieChangedLogs.Insert) 修改 ObservableCollection CollectionChanged → 需要 UI 线程触发 ✅ 必须 (ListBox 更新 UI 需要 UI 线程)

一句话总结

ObservableProperty 的 PropertyChanged 事件 WPF 绑定系统会自动调度到 UI 线程,但创建 Brush、修改 ObservableCollection 等操作需要手动用 Dispatcher.Invoke 切到 UI 线程。 🎯