【发布时间】:2023-03-07 15:18:02
【问题描述】:
我有一个 WPF 应用程序,它需要对许多小任务进行一些处理。 这些小任务都是同时生成的,并以 Normal 的优先级添加到 Dispatcher Queue 中。同时显示忙碌指示符。结果是,尽管工作被分解为任务,但忙碌指示器实际上冻结了。
我尝试将这些任务的优先级更改为后台,看看是否解决了问题,但忙碌指示器仍然冻结。
我订阅了Dispatcher.Hooks.OperationStarted 事件,以查看在我的任务处理期间是否发生了任何渲染作业,但它们没有。
有什么想法吗?
一些技术细节:
这些任务实际上只是来自Observable 序列的消息,它们通过调用ReactiveUI 的ObserveOn(RxApp.MainThreadScheduler) 被“排队”到调度程序中,这应该等同于ObserveOn(DispatcherScheduler)。每个任务的工作部分是通过 ObserveOn 调用订阅的代码,例如
IObservable<TaskMessage> incomingTasks;
incomingTasks.ObserveOn(RxApp.MainThreadScheduler).Subscribe(SomeMethodWhichDoesWork);
在这个例子中,incomingTasks 可能会连续产生 3000 多条消息,ObserveOn 将每个对 SomeMethodWhichDoesWork 的调用推送到 Dispatcher 队列中,以便稍后处理
【问题讨论】:
标签: wpf system.reactive dispatcher reactiveui