【发布时间】:2014-11-06 09:59:55
【问题描述】:
我编写了一个 C# void async 函数,它采用以下参数:
-
string网址 -
Bitmap对象
该函数然后从文件缓存、内存缓存中检索 url 或从网站异步下载 url。
我的问题是:我如何知道Bitmap 对象何时填充了图像,以便我可以在我的代码中使用这个Bitmap 图像?
提前致谢。
【问题讨论】:
标签: c# function asynchronous bitmap void
我编写了一个 C# void async 函数,它采用以下参数:
string 网址Bitmap 对象该函数然后从文件缓存、内存缓存中检索 url 或从网站异步下载 url。
我的问题是:我如何知道Bitmap 对象何时填充了图像,以便我可以在我的代码中使用这个Bitmap 图像?
提前致谢。
【问题讨论】:
标签: c# function asynchronous bitmap void
没有简单的方法知道 async 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;
}
【讨论】:
true 之外的任何其他值,那么bool 的意义何在?
Exception传达。