我们可以从 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>
答案 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)都可以向另一方建立请求。