我有一个“活动对象”的集合。也就是说,需要定期更新自身的对象。反过来,这些对象应该用于更新基于 WPF 的 GUI。
在过去,我只会让每个对象都包含它自己的线程,但这仅在使用有限数量的具有明确定义的生命周期的对象时才有意义。现在我正在使用仅在表单需要时才存在的对象,因此生命周期是不可预测的。此外,我可以有几十个对象都进行数据库和 Web 服务调用。
正常情况下更新间隔为 1 秒,但由于超时,最多可能需要 30 秒。
那么,你会推荐什么设计呢?
我有一个“活动对象”的集合。也就是说,需要定期更新自身的对象。反过来,这些对象应该用于更新基于 WPF 的 GUI。
在过去,我只会让每个对象都包含它自己的线程,但这仅在使用有限数量的具有明确定义的生命周期的对象时才有意义。现在我正在使用仅在表单需要时才存在的对象,因此生命周期是不可预测的。此外,我可以有几十个对象都进行数据库和 Web 服务调用。
正常情况下更新间隔为 1 秒,但由于超时,最多可能需要 30 秒。
那么,你会推荐什么设计呢?
您可以为所有或一组活动对象使用一个调度程序(调度程序)。Dispatcher 可以先处理高优先级的任务,然后再处理其他任务。您可以查看这篇关于长时间运行的活动对象的文章,了解如何执行此操作。另外,我建议查看半同步/半异步模式。如果您有任何问题 - 欢迎。
如果可能的话,我可能会尝试概括出某种数据总线,并且当对象处于“活动”状态时,让它们将自己添加到要更新的对象列表中。如果对象由数据库支持,我特别想使用此模式,因为这样您可以聚合多个查询,而不必为每个对象执行一个查询。
如果最终没有特定对象的侦听器,没什么大不了的,数据就无处可去。
然后,核心更新程序代码可以使用单个计时器(或多个计时器,或任何合适的计时器)来确定何时获取更新。这样做更多的是数据流,而不是“状态更新”,最终可能会节省很多理智。
我不是专家,但我只会让对象触发一个事件,指示它们何时发生变化。然后,GUI 可以在收到事件时刷新自身的必要部分(使用数据绑定和 INotifyPropertyChanged 时很容易)。