WPF应用程序有两个UI线程,每个都在自己的监视器上运行?

时间:2011-04-29 19:58:05

标签: wpf

我需要创建一个WPF应用程序,它有两个窗口用于它的UI,它将由两个独立的用户同时使用。 它需要在具有双显示器的单个PC上运行,以便每个UI屏幕显示在其自己的监视器上。该应用程序适用于工业控制 我们正在建造的机器的接口。

机器描述:该系统是泵制造商的试验台。他们希望有两名操作员配备该站。 所以它需要能够同时测试两个泵但不能同步测试(每个操作员我在不同的时间开始他们的测试)。 系统将测试泄漏,振动,流量,压力和电机电流。有数百种不同的型号都有 不同的测试参数以及不同的测试程序。期望具有单个PC和单个PLC作为控制硬件。 PC将配备双触摸屏显示器(每个操作员一个),两个条形码扫描仪(每个操作员一个)和两个Zebra标签打印机 (每个运营商一个)。 PC将通过EtherNet I / P与Allen Bradley Compact Logix PLC连接。 PLC将被编程为控制 机器上的所有执行器和传感器。 PC将命令PLC在写入后执行各种测试序列 适当的PLC参数。 PLC将在测试序列期间收集数据,PC应用程序将检索它并将其写入持久性 存储

应用程序描述:应用程序将使用SQL Express数据库来存储所有泵模型的测试参数以及 每个泵测试期间收集的数据。该应用程序将提供具有相同功能但能够的双UI 彼此独立运作。该应用程序将有一个UI屏幕,用于输入和编辑所有不同泵的参数 模型,另一个屏幕,用于查看为给定泵收集的数据以及将显示当前泵测试信息的主屏幕,例如 正在使用的参数,测试进度和实时换能器数据。使用场景如下:操作员接收一批泵 随着工作订单表,他/她扫描工作订单上的条形码应用程序解码扫描并提取型号,然后 从数据库中检索测试参数并在屏幕上显示信息,在操作员确认后写入参数并进行测试 顺序到PLC。操作员将泵加载到测试室中并关闭安全门。向操作员显示“开始测试”按钮 PLC确认泵存在且安全门关闭后。操作员按下“开始测试”按钮,PC和PLC'相互通信 在PC更新UI时执行测试序列,以使操作员了解序列的每个步骤的进度和结果。 测试完成后,PC会为泵生成GUID并将链接到GUID的测试数据存储在数据库中并打印条形码 使用GUID编码的标签和通过/失败状态代码。安全门解锁第二站的操作员执行相同的任务 但是使用不同的工作订单,这可能是一个不同的型号泵,因此其他工作站的测试完全相互独立。

我的问题是:是否有可能让一个WPF应用程序实例化两个单独的UI线程 在单独的监视器上,以便两个UI窗口看起来同时具有焦点。如果是这样,你怎么做。 另外几个要处理的问题是:每个监视器都是一个触摸屏,因此需要处理两个单独的鼠标输入 每个用户都有一个条形码扫描器,因此需要监控两个USB或串行扫描仪的输入。

5 个答案:

答案 0 :(得分:1)

无论使用多少个线程,都不能同时拥有两个窗口焦点窗口。最好的解决方案是使用一个巨大的窗口创建一个标准的WPF应用程序 - 这将允许您做你想做的事。

答案 1 :(得分:1)

听起来你最好使用2台机器,每台机器上运行一个实例。

其他人已经提出了焦点问题,但你也有两倍的传感器/等来管理。

你可以花一美元写一个超级复杂的应用程序,这个应用程序违反了关于一组输入+焦点的大多数规则,或花费相同的$$来让另一台机器运行应用程序?

答案 2 :(得分:1)

正如其他答案所述,一次只能有一个窗口可以聚焦。 来自任一用户的输入将到达最后一个聚焦窗口。

考虑创建一个服务器应用程序和两个与服务器通信的远程UI应用程序。 这样,您就有一个运行逻辑的应用程序,但有两个远程应用程序将其输入,从单独的计算机。 (其中一台输入机器也可以用作服务器的机器。)

您还可以拥有两个可以直接相互通信的桌面应用程序(在不同的计算机上) 没有服务器应用程序,但实现起来会有点棘手。

答案 3 :(得分:0)

我不确定你是否可以在WPF应用程序中同时拥有两个焦点(焦点?),但听起来它很快就会变得混乱。在我看来,一个更清洁的解决方案是运行两个单独的应用程序实例。

答案 4 :(得分:0)

Windows一次只能向一个窗口发送触摸输入。你无能为力。 “解决方法”是在一个窗口内处理所有输入,进行一些命中测试,然后做出相应的反应。