当应用程序在Windows 10中以指定的访问模式运行时,无法显示MessageBox

cro*_*oxy 3 c# kiosk-mode windows-10 uwp

我编写了一个UWP-App,一切正常(在调试和发布模式下).我打包我的应用程序并将其安装在安装了Windows 10的平板电脑上(我在Windows 10台式机上开发),仍然没有问题.
但是现在我想在这个平板电脑上以指定的访问模式(自助服务终端模式)运行我的应用程序突然突然出现我的消息框不再出现并出现错误.
因为我正在使用mvvm模式,所以我编写了一个帮助类来显示消息框,因此我不需要Windows.UI在我的ViewModel中使用:

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();
      });
   }
}
Run Code Online (Sandbox Code Playgroud)

错误:

对ASTA的COM调用被阻止,因为调用链起源于或通过另一个ASTA.这种呼叫模式容易出现死锁,并且不受公寓呼叫控制的限制.

一个COM呼叫(IID:{638BB2DB-451D-4661-B099-414F34FFB9F1},方法指数:6)到ASTA(线程6992)被阻止,因为调用链起源于或通过另一ASTA(线程7188)传递.这种呼叫模式容易出现死锁,并且不受公寓呼叫控制的限制.at:at Windows.ApplicationModel.Core.CoreApplicationView.get_CoreWindow()

我不明白在Windows 10中使用指定的访问权限时有什么不同.如上所述,只有当应用程序在指定的访问权限中运行时才会出现此错误.在任何其他情况下,所有工作正常(在台式机和平板电脑上).

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

Tod*_*odd 5

这可能会崩溃,因为您使用的是MainView调度程序,它不适用于Windows 10分配的访问模式应用程序.

推荐是使用

CoreApplication.GetCurrentView().Dispatcher
Run Code Online (Sandbox Code Playgroud)

代替

CoreApplication.MainView.CoreWindow.Dispatcher
Run Code Online (Sandbox Code Playgroud)

从" 指定访问的Kiosk应用程序:最佳实践 "

每个视图或窗口都有自己的调度程序.在指定的访问模式下,您不应使用MainView调度程序,而应使用CurrentView调度程序.