使用“;等待”;在Dispatcher.RunAsync()中引发异常

本文关键字:异常 Dispatcher 等待 使用 RunAsync | 更新日期: 2023-09-27 18:20:30

相关代码如下:

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。

这里允许异步等待吗?

使用“;等待”;在Dispatcher.RunAsync()中引发异常

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

其接受的代表的实际签名为public delegate void DispatchedHandler()

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