在Dispatcher.RunAsync()中使用"await"会引发异常

Isi*_* O. 1 .net c# asynchronous microsoft-metro windows-8

相关代码如下:

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;
});
Run Code Online (Sandbox Code Playgroud)

当我运行它时,抛出E_ACCESSDENIED.

isync-await允许吗?

Ser*_*rvy 5

Dispatcher.RunAsync不是为了接受async代表.它的设计本身就是为了Task等待它.您提供的方法应该是非异步方法.

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

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