Wpf 棱镜控制外部器件

Wpf 棱镜控制外部器件,wpf,mvvm,tcp,prism,Wpf,Mvvm,Tcp,Prism,我计划将PRISM库用于在PC上运行的项目,该PC控制一个或多个仪器,可视化和存储设备的数据,并允许用户输入一些控制数据。这些设备有各种数字和模拟传感器和演员。他们可能有不同的类型和智力。大多数情况下,他们没有“真正的”智能,所有的控制逻辑都在电脑中。 这种“智能”需要不断地从设备读取数据。通信可以是各种类型的,如COM端口、TCP/IP套接字、HTTP到web接口等 我不确定什么是“智能逻辑”的最佳解决方案。由于它需要与设备进行连续通信,因此需要与所有UI任务分离。它需要后台工作线程或线程中的

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

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


问题:它是否应该是在PRISM中注册为服务的每个设备的实例,并引用该后台工作程序?还是应该创建后台工作程序并将其链接到每个配置仪器所需的ViewModel,以处理要显示和编辑的数据?还是有其他最佳解决方案

我认为这是一个更一般的架构问题,而不是一个具体的棱镜问题

我在其他MVVM框架中也做过类似的事情,我的解决方案是基于单个侦听器(我只有TCP套接字可以与工具进行通信)注册为服务。在应用程序中,您可以有多个队列,也可以有一个具有多个生产者的队列

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

从ViewModel到设备的通信直接进行,无需经过“输出”队列

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


但这确实是一个宽泛的问题,我的答案也很宽泛很多事情取决于你如何与dvice互动。我的解决方案平衡了复杂性和灵活性,但还有许多其他体系结构可用。

谢谢您的回答,Antonello。我不喜欢安装Windows服务,而更喜欢PRISM中的共享服务。但是,是的,这个问题可以被看作是非常通用的体系结构。我所建议的模式也可以与PRISM中的共享通信服务一起使用,只需使用后台工作人员来实现它。我更喜欢这种单侦听器体系结构,因为当出现通信问题时,它更容易调试。