从UWP运行时组件项目

时间:2018-03-16 15:20:33

标签: c# visual-studio uwp background-task

我们可以从 AppService 更新UWP TextBlock的文字吗?

在这里,我在不同的UWP运行时组件项目中拥有应用服务,并将其添加为UI项目的参考。

所以我没有与UI直接联系。但如果应用程序正在运行,我需要更新UI。

注意:我们可能会显示Toast和Live Tile。但想知道直接更新UI的可能性。

已编辑:[18/3/18]

我尝试使用 DesktopBridge 合并UWP中的现有WPF应用。在这里,我需要在两个应用程序之间进行双向通信。

因此,在WPF和UWP中分别创建了两个AppServices,以ValueSet的形式发送和接收数据,并根据所需的数据更新UI。

对于在同一项目中具有UI和AppService的WPF应用程序。对于UWP App,将AppServices分离为运行时组件项目(Out-Of-Proc)。在这种情况下,两个AppServices在运行时都运行良好,但无法更新UWP UI(但能够更新WPF UI)。

此外,我尝试使用进程内服务,在这种情况下,两个AppServices都正常工作,但我无法建立从UWP到WPF的连接。所以我无法向UWP发送请求(WPF到UWP正在运行)。

所以这是我的实际问题。想知道我做得对吗?有没有办法解决或任何其他更好的方法来做到这一点。

以下是 .appmanifest 代码。

作为In-Proc服务

<Extensions>
    <uap:Extension Category="windows.appService">
        <uap:AppService Name="com.mycompany.scanner.uwpappservice" />
    </uap:Extension>
    <uap:Extension Category="windows.appService">
        <uap:AppService Name="com.mycompany.scanner.wpfappservice" />
    </uap:Extension>
    <desktop:Extension Category="windows.fullTrustProcess" Executable="Scanner.WPF.exe" />
</Extensions>

作为Out-Of-Proc服务

<Extensions>
    <uap:Extension Category="windows.appService" EntryPoint="UWPApp.AppServiceLibrary.UWPAppService">
        <uap:AppService Name="com.mycompany.scanner.uwpappservice" />
    </uap:Extension>
    <uap:Extension Category="windows.appService">
        <uap:AppService Name="com.mycompany.scanner.wpfappservice" />
    </uap:Extension>
    <desktop:Extension Category="windows.fullTrustProcess" Executable="Scanner.WPF.exe" />
</Extensions>

2 个答案:

答案 0 :(得分:1)

您可以使用documentation中所述的进程内应用服务

  

App Services现在可以在与前台相同的进程中运行   应用程序,使应用程序之间的通信更容易和   无需将服务代码分成单独的项目。

这意味着您甚至不必将代码移动到单独的Windows运行时组件,并且如果它通过Window.Current处于活动状态,您可以与UI通信。但是,您需要记住确保使用Dispatcher在UI线程上运行操作UI的代码。

答案 1 :(得分:1)

如果您已将AppService配置为使用前台应用程序运行in-proc,则可以直接更新UI。如果AppService正在运行失败,那么您需要向前台应用程序发送请求以代表您更新其UI,或者使用toast / tile通知。

以下是有关如何使用应用程序进程在进程中运行AppService的一些信息: https://docs.microsoft.com/en-us/windows/uwp/launch-resume/convert-app-service-in-process

关于已编辑的问题,使用的典型模式是:当WPF应用程序启动时,打开与UWP的应用程序服务连接。现在,双方都保持对AppServiceConnection对象的相应实例的引用。这样你就可以进行双向通信,任何一方(UWP和WPF)都可以向另一方建立请求。