PRISM控制外部设备

时间:2017-04-12 07:14:43

标签: wpf mvvm tcp prism

我计划将PRISM库用于在PC上运行的项目,该项目控制一个或多个仪器,并可视化和存储设备的数据,并让用户输入一些控制数据。这些设备具有各种数字和模拟传感器和演员。它们可以是不同类型和智能的。大多数情况下,他们没有真正的'智能和所有控制逻辑都在PC中。 这个'情报'需要不断地从设备读取数据。通信可以是各种类型,如COM端口,TCP / IP套接字,HTTP到Web界面等。

我不确定什么是最佳解决方案'智能逻辑'。由于需要与设备进行持续通信,因此需要将其与所有UI任务分开。在后台工作者或线程中需要某种状态机来构建更高的进程逻辑。

问题:它应该是在PRISM中注册的每个设备的实例作为服务,并引用该后台工作者吗?或者应该创建后台工作者并将其链接到我需要的ViewModel,以便每个配置的工具处理它的数据以显示和编辑?还是有另一种最佳解决方案?

1 个答案:

答案 0 :(得分:0)

我认为这比一个特定的PRISM更普遍的架构问题......

我已经完成了与其他MVVM框架类似的工作,我的解决方案基于单个侦听器(我只有TCP套接字与工具协同)注册为服务。在您的应用程序中,您可以拥有多个队列,也可以拥有多个生产者的单个队列。

来自设备的所有消息都插入到并发队列中,每个ViewModel(每个设备一个)从该队列中读取。

从ViewModel到设备的通信直接发生,无需通过“输出”队列。

整个应用程序构建在await / async模式上,以便将UI与通信分离。我能够同时从serval设备发送和接收多个命令和通知,没有任何问题。

但这又是一个广泛的问题,我的答案很广泛,取决于你如何与服务进行互动。我的解决方案平衡了复杂性和灵活性,但是还有很多其他架构可供使用。