首页 > 解决方案 > 如何将数据从 WPF 应用程序发送到 UWP 应用程序?

问题描述

我有一个 UWP 应用程序,它通过 USB 从微控制器接收数据并将数据记录到数据库中。我有第二个 WPF 应用程序,它也从单独的微控制器获取一些数据,我也想记录这些数据。为此,我想将数据从 WPF 应用程序发送到 UWP 应用程序并将数据记录在一起。我正在尝试将日志之间的最快日志速度设计为 50 毫秒。两个应用程序都在同一台计算机上运行。

到目前为止,我一直使用它作为我的主要资源:https ://docs.microsoft.com/en-us/windows/uwp/communication/interprocess-communication

我尝试过 TCP/UDP,但遇到了 UWP 无法使用 localhost 环回的问题。
我查看了名称管道,但似乎 UWP 不支持其应用程序包之外的命名管道。

似乎应用服务是我想要前进的方向,但我不确定这将如何运作。我所看到的示例使应用服务看起来只是一些可以由另一个应用程序调用但不与其宿主应用程序交互的代码。我需要该服务将数据通过管道传输到 UWP 应用程序中。

我的另一个想法是,也许有一种方法可以将数据库记录器作为应用程序服务运行,并从 UWP 和 WPF 应用程序接收数据。它需要使用每个应用程序提供的最新值以固定间隔记录,并支持某种 Start() 和 Stop() 接口。

应用服务是正确的方向吗?还有其他选择吗?如果这是正确的选择,主机应用程序如何从应用程序服务发送或获取数据?

它越来越接近我觉得我需要将我的 UWP 应用程序移植到 WPF 或使用虚拟 com 端口在应用程序之间进行通信的地步。

标签: c#wpfuwp

解决方案


应用服务可以实现wpf和uwp应用之间的通信,当你运行这些应用想要传输数据时,可以在wpf中创建AppServiceConnection对象并连接uwp应用,就可以实现wpf和uwp应用之间的通信了。例如,以下面的代码为例,将您在 uwp 项目清单中声明的​​ AppServiceName 传递给 AppServiceConnection 的 AppServiceName 并传递您的 uwp 应用程序的 PackageFamilyName。然后打开与应用服务端点的连接。通过订阅 RequestReceived 事件进行通信。

在 WPF 应用程序中,

private void Button_Click(object sender, RoutedEventArgs e)
{
    connection = new AppServiceConnection();
    connection.AppServiceName = "CommunicationService";
    connection.PackageFamilyName = "Microsoft.AppServiceBridge_8wekyb3d8bbwe";
    connection.RequestReceived += Connection_RequestReceived;

    connection.OpenAsync();
        
}

有关如何在您的 uwp 项目中进行配置的更多详细信息,您可以参考这个官方示例

另外,连接后可以调用 AppServiceConnection.SendMessageAsync() 方法向 wpf 发送数据。当wpf app接收到数据时,会触发RequestReceived事件,你可以通过使用获取数据args.Request.Message并调用args.Request.SendResponseAsync方法向uwp app发送数据。


推荐阅读