线程与界面
内核在 IO 线程和线程池上工作,不会假定你使用 WinForms 还是 WPF。
DataReceived和StateChanged可能在非 UI 线程触发。- 更新控件前必须切换到 UI 线程。请使用适配器,而不是在每个窗口里手写
Invoke。 - 不要在事件回调里做长时间阻塞,以免耽误接收。
| 程序集 | 线程切换 | 常用 API |
|---|---|---|
Zeus.Presentation.WinForms | Control.BeginInvoke | AttachZeus、BindTo |
Zeus.Presentation.Wpf | Dispatcher.BeginInvoke | AttachZeus、BindTo、AsBindingSource |
Zeus.Presentation.Abstractions | IUiDispatcher | 测试可用 ImmediateUiDispatcher |
内核和 Zeus.Presentation.Abstractions 不引用桌面框架。
如果必须自己订阅事件,WinForms 使用 BeginInvoke,WPF 使用 Dispatcher。窗口关闭后不要再改控件。