我已经编写了一个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.Normal, 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中以指定的访问模式运行时是否有任何人遇到过相同的问题?
或者有人知道如何解决这个问题?
答案 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用户。它提供了更多控制,在这种情况下,您可以免除任何其他操作系统问题,功能,废话等。