C# 调用async方法在viewmodel的构造函数中加载数据时出现警告

C# 调用async方法在viewmodel的构造函数中加载数据时出现警告,c#,.net,wpf,asynchronous,async-await,C#,.net,Wpf,Asynchronous,Async Await,我的视图包含一个ListView,它显示来自internet的一些数据,我创建一个异步方法来加载数据,并在我的viewmodel的构造函数中调用该方法。它有一个警告提示我现在使用等待关键字 在构造函数中异步加载数据的任何其他解决方案?我个人会将数据加载委托给一个方法,例如Task LoadDataAsync(…)…但是,如果您将异步方法的结果分配给一个字段,则警告应该消失。如果您正在调用Wait(),那么首先是否应该调用异步方法是有问题的 请参阅,以获取您可能感兴趣的异步初始化模式。有几个模式可

我的视图包含一个ListView,它显示来自internet的一些数据,我创建一个异步方法来加载数据,并在我的viewmodel的构造函数中调用该方法。它有一个警告提示我现在使用等待关键字


在构造函数中异步加载数据的任何其他解决方案?

我个人会将数据加载委托给一个方法,例如Task LoadDataAsync(…)…但是,如果您将异步方法的结果分配给一个字段,则警告应该消失。如果您正在调用Wait(),那么首先是否应该调用异步方法是有问题的


请参阅,以获取您可能感兴趣的异步初始化模式。

有几个模式可以应用,Stephan Cleary在文章中提到了这些模式

不过,让我提出一些不同的建议:

由于您在WPF应用程序中,我将使用事件并将其绑定到ViewModel中的
ICommand
。有界命令将是一个可以等待的命令。我还将利用

查看XAML:

<Grid>
 <interactivity:Interaction.Triggers>
     <interactivity:EventTrigger EventName="Loaded">
         <interactivity:InvokeCommandAction Command="{Binding MyCommand}"/>
     </interactivity:EventTrigger>
 </interactivity:Interaction.Triggers>
</Grid>
public class ViewModel
{
    public ICommand MyCommand { get; set; }

    public ViewModel()
    {
        MyCommand = new AwaitableDelegateCommand(LoadDataAsync);
    }

    public async Task LoadDataAsync()
    {
        //await the loading of the listview here
    }
}

您应该显示您的代码,并在问题中包含实际警告。有关此问题的解决方案,请阅读Stephen Cleary的和.Closed as duplicate。不管您的构造函数是用于视图模型还是其他什么。问题是一样的。构造函数不能是异步的!感谢您发布Cleary的工厂模式。我一直在追问为什么不能将async重构为ViewModel。现在我可以了。好极了!!