在类ContactsAdapter中我有方法OnBindViewHolder,我在其中调用await DirectToLoadImageAsync(stringURL,my_contacts_view.vImage)。 await方法使OnBindViewHolder形成:
public class ContactsAdapter: RecyclerView.Adapter, View.IOnClickListener
{
public override async System.Threading.Tasks.Task OnBindViewHolderAsync(RecyclerView.ViewHolder holder, int position)
{
...
await DirectToLoadImageAsync(stringURL, my_contacts_view.vImage);
...
}
private async System.Threading.Tasks.Task DirectToLoadImageAsync(string stringURL, CircleImageView vImage)
{
var resultImg = await LoadImageAsync(stringURL);
vImage.SetImageBitmap(resultImg);
}
private System.Threading.Tasks.Task<Bitmap> LoadImageAsync(string stringURL)
{
return System.Threading.Tasks.Task.Factory.StartNew(() => LoadImage(stringURL));
}
private Bitmap LoadImage(string stringURL)
{
...
}
}
如何避免错误:OnBindViewHolder找不到合适的方法来覆盖使用await方法?
答案 0 :(得分:0)
OnBindViewHolder找不到合适的方法来覆盖使用等待方法吗?
由于返回类型不兼容,您无法在方法签名中使用async
关键字,因此无法在此方法中使用await关键字,请注意您的OnBindViewHolder
已重命名为OnBindViewHolderAsync
}。
async
方法必须返回void
,Task
或Task<T>
,并且仅在使事件处理程序异步时才使用返回void
。对于上面提到的OnBindViewHolder
方法,其返回类型为void,无法更改为返回Task
,因为调用它的OS方法显然不使用await
关键字等无法处理返回的Task
。因此,您无法将async
关键字添加到上述方法中,因此在从上述方法调用await
方法时无法使用async
关键字。
像这样修改你的代码:
public override void OnBindViewHolder (RecyclerView.ViewHolder holder, int position)
{
...
Task.Run(async () => {
try
{
await DirectToLoadImageAsync(stringURL, my_contacts_view.vImage);
}
// Catch any other exceptinons that may have occured
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
});
...
}