我的异步函数何时完成
本文关键字:何时完 函数 异步 我的 | 更新日期: 2023-09-27 18:29:18
我已经编码了一个C#void
async
函数,该函数采用以下参数:
string
urlBitmap
对象
然后,该函数从文件缓存、内存缓存中检索url,或者异步地从网站下载url。
我的问题是:如何通知我Bitmap
对象何时填充了图像,以便我可以在代码中使用此Bitmap
图像?
提前谢谢。
没有简单的方法可以知道异步void方法何时完成。将方法的返回类型从void
更改为Task
。返回指示操作何时完成的任务。
然后,在客户端代码中等待Task
完成就很简单了。一旦Task
完成,您就可以使用您的Bitmap
。
如果你从某个源下载位图,理想情况下应该返回Task<Bitmap>
,而不是将Bitmap
作为参数传递并修改它。(如果我理解错误,请忽略它)。
如果你想检查位图何时准备好,最简单的方法是将你的方法转换成这样:
async Task<bool> myMethod(myParamter) {
//DO Something
return true;
}
然后以以下方式调用方法
bool isReady = await myMethod(...)
在调用myMethod
添加异步时,您还必须更改方法的签名
改进版:
Task<bool> pendingDownload = null;
private async void mainMethod(...) {
if(pendingDownload != null) {
MessageBox.Show("Image is not ready!");
return;
}
try{
pendingDownload = myMethod(...);
bool isReady = await pendingDownload;
MessageBox.Show("Bitmap downloaded");
} catch(Exception e) {
MessageBox.Show("Error in downloading image: " + ex.Message);
}
pendingDownload = null;
}