当应用在 Windows 10 中以分配的访问权限模式运行时,无法显示消息框

本文关键字:运行时 模式 权限 消息 显示 访问权 访问 Windows 应用 分配 | 更新日期: 2023-09-27 18:30:40

我写了一个UWP应用程序,它工作正常(在调试和发布模式下)。我已经打包了我的应用程序并将其安装在安装了 Windows 10 的平板电脑上(我在 Windows 10 台式电脑上开发),仍然没有问题.
但是现在我想在此平板电脑上以分配的访问模式(kiosk 模式)运行我的应用程序,突然我的消息框不再显示并出现错误.
因为我正在使用 mvvm 模式,所以我编写了一个帮助程序类来显示消息框,所以我不需要在我的 ViewModel 中使用Windows.UI

public class UserNotificationService : IUserNotificationService
{
   public async Task ShowMessageDialogAsync(string message, string title = null)
   {
      MessageDialog messageDialog = title == null ? new MessageDialog(message) : new MessageDialog(message, title);
      await ShowAsync(messageDialog);
   }
   // This method throws an error
   private async Task ShowAsync(MessageDialog msgDialog)
   {
      // I've to do it like this because otherwise it won't work because I'm working on a different thread while calling this method
      await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.N‌​ormal, async () => {
         await msgDialog.ShowAsync();
      });
   }
}

错误:

对 ASTA 的 COM 调用被阻止,因为调用链源自另一个 ASTA 或通过另一个 ASTA。此呼叫模式容易出现死锁,公寓呼叫控制不允许。

对 ASTA(线程 6992)的 COM 调用 (IID: {638BB2DB-451D-4661-B099-414F34FFB9F1},方法索引: 6) 被阻止,因为调用链源自另一个 ASTA(线程 7188)。此呼叫模式容易出现死锁,公寓呼叫控制不允许。在: 在 Windows.ApplicationModel.Core.CoreApplicationView.get_CoreWindow()

我不明白在 Windows 10 中使用分配的访问权限时有什么不同。如上所述,此错误仅在应用在分配的访问权限中运行时出现。在任何其他情况下,一切正常(在台式电脑和平板电脑上)。

所以我的问题是:
是否有人在开发应用程序以在 Windows 10 中的分配访问模式下运行时遇到同样的问题?
或者有人知道如何解决这个问题吗?

当应用在 Windows 10 中以分配的访问权限模式运行时,无法显示消息框

这可能是崩溃的,因为你使用的是 MainView 调度程序,该调度程序在 Windows 10 分配访问模式应用中不起作用。

建议使用

CoreApplication.GetCurrentView().Dispatcher

而不是

CoreApplication.MainView.CoreWindow.Dispatcher

摘自"用于分配访问权限的自助服务终端应用:最佳做法"

每个视图或窗口都有自己的调度程序。在分配的访问权限模式下,不应使用 MainView 调度程序,而应使用 CurrentView 调度程序。

相关文章: