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

时间:2013-07-01 14:26:13

标签: c# .net asynchronous windows-8 microsoft-metro

相关代码如下:

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。

是否允许async-await?

1 个答案:

答案 0 :(得分:5)

Dispatcher.RunAsync并非旨在接受async代表。它被设计为自己返回Task以便可以等待它。您提供的方法应该是非异步方法。

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

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