C# 从UWP运行时组件项目更新UWP应用程序UI的方法

C# 从UWP运行时组件项目更新UWP应用程序UI的方法,c#,visual-studio,uwp,windows-10,background-task,C#,Visual Studio,Uwp,Windows 10,Background Task,我们可以从AppService更新UWP文本块的文本吗 在这里,我在不同的UWP运行时组件项目中使用应用程序服务,并将其作为UI项目的参考添加 所以我和UI没有直接的联系。但如果应用程序以活动状态运行,我需要更新UI 注意:我们可以展示烤面包片和活动瓷砖。但是我想知道直接更新用户界面的可能性 编辑:[18/3/18] 我正在尝试使用DesktopBridge将现有WPF应用程序合并到UWP中。在这里,我需要有两个应用程序之间的双向通信 因此,分别在WPF和UWP中创建了两个AppServices

我们可以从AppService更新UWP文本块的文本吗

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

所以我和UI没有直接的联系。但如果应用程序以活动状态运行,我需要更新UI

注意:我们可以展示烤面包片和活动瓷砖。但是我想知道直接更新用户界面的可能性

编辑:[18/3/18]

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

因此,分别在WPF和UWP中创建了两个AppServices,以值集的形式发送和接收数据,并根据请求的数据更新UI

对于在同一项目中具有UI和AppService的WPF应用程序。对于UWP应用程序,将AppServices分离为运行时组件项目(进程外)。在这种情况下,两个AppServices在运行时都工作正常,但无法更新UWP UI(但能够更新WPF UI)

此外,我还尝试使用进程内服务,在本例中,两个AppServices都工作正常,但我无法建立从UWP到WPF的连接。所以我不能从UWP发送请求(WPF到UWP正在工作)

这就是我的实际问题。想知道我做得对吗?有没有办法解决这个问题或者其他更好的办法

以下是.appmanifest代码

与过程服务相同

<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>
<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>

作为程序外服务

<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>
<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>

您可以使用流程内应用程序服务,如中所述

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


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

操作UI的代码在UI线程上运行。您可以使用进程内应用程序服务,如中所述

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


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

确保操作UI的代码在UI线程上运行。如果您已将AppService配置为在proc中与前台应用一起运行,则可以直接更新UI。如果AppService的proc已用完,则需要向前台应用发送请求,以代表您更新其UI,或者使用toast/tile通知

以下是有关如何使AppService在应用程序进程的proc中运行的一些信息:


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

如果您已将AppService配置为在proc中与前台应用程序一起运行,则可以直接更新UI。如果AppService的proc已用完,则需要向前台应用发送请求,以代表您更新其UI,或者使用toast/tile通知

以下是有关如何使AppService在应用程序进程的proc中运行的一些信息:


对于已编辑的问题,使用的典型模式是:当WPF应用程序启动时,打开与UWP的应用程序服务连接。现在,两边都保留对AppServiceConnection对象各自实例的引用。通过这种方式,您可以进行双向通信,任何一方(UWP和WPF)都可以向另一方发出请求。

嗨,Stefan,我为我的问题添加了更多要点,请检查。谢谢。嗨,Stefan,我为我的问题增加了更多的分数,请检查。谢谢。嗨,马丁,我为我的问题增加了更多的分数,请检查。谢谢。嗨,马丁,我为我的问题增加了更多的分数,请检查。谢谢