Не удается показать MessageBox, пока приложение работает в назначенном режиме доступа в Windows 10

Я написал UWP-приложение, и все работает нормально (в режиме отладки и выпуска). Я упаковал свое приложение и установил его на планшет с установленной Windows 10 (я разрабатываю на настольном ПК с Windows 10), проблем по-прежнему нет.
Но теперь я хочу запустить свое приложение в режиме назначенного доступа ( режиме киоска) на этом планшете, и внезапно из ниоткуда мои окна сообщений больше не отображаются и появляется ошибка.
Поскольку я работаю с шаблоном mvvm, я написал помощник класс для отображения окон сообщений, поэтому мне не нужно использовать Windows.UI в моих ViewModels:

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();
      });
   }
}

Ошибка:

COM-вызов к ASTA был заблокирован, поскольку цепочка вызовов исходила от другого ASTA или проходила через него. Этот шаблон вызова подвержен взаимоблокировкам и запрещен управлением вызовами в квартире.

Вызов COM (IID: {638BB2DB-451D-4661-B099-414F34FFB9F1}, индекс метода: 6) к ASTA (поток 6992) был заблокирован, поскольку цепочка вызовов возникла или прошла через другой ASTA (поток 7188). Этот шаблон вызова подвержен взаимоблокировкам и запрещен управлением вызовами в квартире. в: в Windows.ApplicationModel.Core.CoreApplicationView.get_CoreWindow()

Я не понимаю, в чем разница при работе с назначенным доступом в Windows 10. Как упоминалось выше, эта ошибка появляется только тогда, когда приложение работает в назначенном доступе. В любом другом случае все работает нормально (на десктопе и на планшете).

Итак, мой вопрос:
Кто-нибудь сталкивался с такой же проблемой при разработке приложения для работы в режиме назначенного доступа в Windows 10?
Или кто-нибудь знает, как решить Эта проблема?


person croxy    schedule 15.01.2016    source источник
comment
Пробовали ли вы сначала проверить свойство HasThreadAccess диспетчера, чтобы не использовать RunAsync, когда код выполняется в потоке пользовательского интерфейса?   -  person Mehrzad Chehraz    schedule 16.01.2016


Ответы (1)


Это может привести к сбою, потому что вы используете диспетчер MainView, который не будет работать в приложении режима назначенного доступа Windows 10.

Рекомендация заключается в использовании

CoreApplication.GetCurrentView().Dispatcher

вместо

CoreApplication.MainView.CoreWindow.Dispatcher

Из "Киоск-приложения для ограниченного доступа: рекомендации"

Каждое представление или окно имеет свой собственный диспетчер. В режиме назначенного доступа не следует использовать диспетчер MainView, вместо этого следует использовать диспетчер CurrentView.

person Todd    schedule 24.01.2016