跳到主要内容

线程与界面

内核在 IO 线程和线程池上工作,不会假定你使用 WinForms 还是 WPF。

  • DataReceived 和 StateChanged 可能在非 UI 线程触发。
  • 更新控件前必须切换到 UI 线程。请使用适配器,而不是在每个窗口里手写 Invoke。
  • 不要在事件回调里做长时间阻塞,以免耽误接收。
程序集线程切换常用 API
Zeus.Presentation.WinFormsControl.BeginInvokeAttachZeus、BindText、BindEnabled
Zeus.Presentation.WpfDispatcher.BeginInvokeAttachZeus、WpfUiDispatcher、MVVM 绑定源
Zeus.Presentation.AbstractionsIUiDispatcher测试可用 ImmediateUiDispatcher

内核和 Zeus.Presentation.Abstractions 不引用桌面框架。

点表内核只提供 Changed 和 BatchChanged,不引用任何界面框架。几个点订 Changed;整表、总貌、趋势落盘订 BatchChanged。AsTableBindingSource 在 Zeus.Presentation.Abstractions 里,只是把 BatchChanged 做成可绑定列表,给 WinForms / WPF 用;控制台和服务直接订事件。怎么选见 点表与采集。

如果必须自己订阅事件,WinForms 使用 BeginInvoke,WPF 在 ViewModel 中使用 WpfUiDispatcher.Current() 或自己的 IUiDispatcher。窗口关闭后不要再改控件。