当应用程序在Windows 10

时间:2016-01-15 09:15:47

标签: c# windows-10 uwp kiosk-mode

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

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。这种呼叫模式容易出现死锁,并且不受公寓呼叫控制的限制。

     

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

我不了解在Windows 10中使用指定的访问权限时的不同之处。如上所述,此错误仅在应用程序在指定的访问权限中运行时才会显示。在任何其他情况下,一切正常(在台式机和平板电脑上)。

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

2 个答案:

答案 0 :(得分:5)

这可能会崩溃,因为您使用的是MainView调度程序,该调度程序无法在Windows 10分配的访问模式应用程序中运行。

推荐是使用

CoreApplication.GetCurrentView().Dispatcher

而不是

CoreApplication.MainView.CoreWindow.Dispatcher

来自“Kiosk apps for assigned access: Best Practices

  

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

答案 1 :(得分:-1)

我建议用于kiosk模式的是创建具有shell替换和自动登录(https://github.com/VoidVolker/kiosk)的kiosk用户。它提供了更多控制,在这种情况下,您可以免除任何其他操作系统问题,功能,废话等。