【问题标题】:Can't show MessageBox while app is running in assigned access mode in windows 10应用程序在 Windows 10 中以分配的访问模式运行时无法显示 MessageBox
【发布时间】:2016-04-20 20:24:16
【问题描述】:

我编写了一个 UWP 应用程序,一切正常(在调试和发布模式下)。我已经打包了我的应用程序并将其安装在安装了 windows 10 的平板电脑上(我在 windows 10 台式电脑上开发),仍然没有问题。
但是现在我想在这台平板电脑上以分配的访问模式(信息亭模式)运行我的应用程序,突然间我的消息框不再出现,并且出现错误。
因为我正在使用 mvvm 模式,所以我编写了一个帮助类来显示消息框,所以我不需要在我的 ViewModels 中使用 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(线程 6992)的 COM 调用(IID:{638BB2DB-451D-4661-B099-414F34FFB9F1},方法索引:6)被阻止,因为调用链源自或通过另一个 ASTA(线程 7188) .这种呼叫模式容易发生死锁,并且被公寓呼叫控制所禁止。在:在 Windows.ApplicationModel.Core.CoreApplicationView.get_CoreWindow()

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

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

【问题讨论】:

  • 您是否尝试过检查调度程序的 HasThreadAccess 属性,以便在 UI 线程中运行代码时不使用 RunAsync?

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


【解决方案1】:

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

推荐使用

CoreApplication.GetCurrentView().Dispatcher

而不是

CoreApplication.MainView.CoreWindow.Dispatcher

来自“Kiosk apps for assigned access: Best Practices

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 2016-01-14
    • 2023-03-18
    • 1970-01-01
    • 2016-04-08
    • 2015-10-23
    • 2021-04-01
    相关资源
    最近更新 更多