gpt4 book ai didi

c# - 如何使用默认覆盖处理异步和等待

转载 作者:搜寻专家 更新时间:2023-11-01 07:54:15 26 4
gpt4 key购买 nike

在 Xamarin 项目中,Android - 我是 android 开发的新手。在处理 Activity 时,在 OnCreate 方法中为 ListView 设置自定义适配器。

protected async override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
SetContentView(Resource.Layout.Main);

var listAdapter = new CustomListAdapter(this);
//.................................................
listView = (ListView) FindViewById(Resource.Id.list);

// populate the listview with data
listView.Adapter = listAdapter;
}

在适配器的 ctor 中,在异步调用中创建项目列表。

public CustomListAdapter(Activity context) //We need a context to inflate our row view from
: base()
{
this.context = context;
// items is List<Product>
items = await GetProductList();
}

由于 Getproducts 是一个异步调用,它会异步加载数据。

问题是一旦我将适配器设置为列表,它将尝试调用适配器的 GetView 方法。届时,不会加载项目。所以有一个空异常。

如何处理这种情况。

谢谢。

最佳答案

您不能在构造函数中使用 await

您可以改为执行几项操作。在我看来,这里最好的做法是拥有一个单独的异步方法,您可以在创建对象后调用并等待该方法。

var listAdapter = new CustomListAdapter(this);
await listAdapter.InitializeAsync();

另一种选择是将构造函数设为私有(private),并使用异步静态方法创建实例并对其进行初始化:

public static async Task<CustomListAdapter> CustomListAdapter.CreateAsync(Activity context)
{
var listAdapter = new CustomListAdapter(context);
listAdapter.items = await GetProductList();
return listAdapter;
}

关于c# - 如何使用默认覆盖处理异步和等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30460579/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com