我正在开发一个 Windows 8.1 应用程序,用户可以使用它玩井字游戏。为了使我的应用程序实时,我利用了 SignalR。这是我为向用户发送游戏请求而编写的代码。
hubProxy.On<string>("ShowRequest", async (requestOwner) =>
{
await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>
{
var messageDialog = new MessageDialog(requestOwner + " wants to play with you", "New Game Request");
messageDialog.Commands.Add(new UICommand("Accept", new UICommandInvokedHandler(CommandHandler)));
messageDialog.Commands.Add(new UICommand("Deny", new UICommandInvokedHandler(CommandHandler)));
messageDialog.DefaultCommandIndex = 1;
messageDialog.CancelCommandIndex = 2;
await messageDialog.ShowAsync();
});
});
当一个用户向另一个用户发送请求时,一个消息对话框会出现在请求发送到的用户屏幕上。如果该用户点击接受按钮,则会显示应用程序的另一个页面。在此页面上,用户玩游戏并再次显示获胜者并带有消息对话框(可能导致错误,我不知道)。到目前为止,一切都很好。但是,如果他们返回上一页并发送另一个请求,则不会显示消息对话框,并且在下面的行中会抛出 UnauthorizedAccessException。
await messageDialog.ShowAsync();
以下是异常详情:
消息:“访问被拒绝。(来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))”
来源:“Windows.UI”
StackTrace:“在 Windows.UI.Popups.MessageDialog.ShowAsync()\r\n 在 XOX.AvailableUsersPage.<>c__DisplayClass7.<<.ctor>b__2>d__b.MoveNext()”
我在 stackoverflow 和其他网站上查看了类似的问题,但它们对我没有帮助。
谢谢
编辑:我真的无法诊断异常的原因。我将这些代码行放在一个 try-catch 块中,并且没有抛出异常!当我从用户玩游戏的页面中删除消息对话框(宣布获胜者的消息)时,再次没有例外。