1

相关代码如下:

Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>
{
    MessageDialog dialog = new MessageDialog("Wrong username or passwork. Please try again.");
    await dialog.ShowAsync();
    this.LoginButton.IsEnabled = true;
});

当我运行它时,会抛出 E_ACCESSDENIED。

这里允许异步等待吗?

4

1 回答 1

5

Dispatcher.RunAsync不是为了接受async委托而设计的。它被设计为自己返回 aTask以便可以等待它。你给它的方法应该是非异步方法。

它接受的代表的实际签名是public delegate void DispatchedHandler()

因为委托是无效的,所以返回RunAsync会认为它awaits在第一次完成时就完成了,而不是在它实际完成时。这意味着等待此方法的任何代码都将在它应该继续之前继续运行。

于 2013-07-01T14:38:06.757 回答