C# 我的异步函数什么时候完成
我编写了一个C void异步函数,该函数采用以下参数: 字符串url 位图对象 然后,该函数从文件缓存、内存缓存中检索url,或从网站异步下载url 我的问题是:当位图对象已填充图像时,如何通知我,以便在代码中使用此位图图像C# 我的异步函数什么时候完成,c#,function,asynchronous,bitmap,void,C#,Function,Asynchronous,Bitmap,Void,我编写了一个C void异步函数,该函数采用以下参数: 字符串url 位图对象 然后,该函数从文件缓存、内存缓存中检索url,或从网站异步下载url 我的问题是:当位图对象已填充图像时,如何通知我,以便在代码中使用此位图图像 提前感谢。不容易知道异步void方法何时完成。将方法的返回类型从void更改为Task。返回指示操作何时完成的任务 然后在客户端代码中等待任务完成就很简单了。一旦任务完成,您就可以使用位图 若从某个源下载位图,最好返回任务,而不是将位图作为参数传递并修改它。如果我理解错误,
提前感谢。不容易知道异步void方法何时完成。将方法的返回类型从void更改为Task。返回指示操作何时完成的任务 然后在客户端代码中等待任务完成就很简单了。一旦任务完成,您就可以使用位图
若从某个源下载位图,最好返回任务,而不是将位图作为参数传递并修改它。如果我理解错误,请忽略它。没有简单的方法可以知道异步void方法何时完成。将方法的返回类型从void更改为Task。返回指示操作何时完成的任务 然后在客户端代码中等待任务完成就很简单了。一旦任务完成,您就可以使用位图
若从某个源下载位图,最好返回任务,而不是将位图作为参数传递并修改它。如果我理解错误,请忽略它。如果您想检查位图何时准备好,最简单的方法是用如下方式转换您的方法:
async Task<bool> myMethod(myParamter) {
//DO Something
return true;
}
您还必须更改调用myMethod adding async的方法的签名
改进版:
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;
}
如果要检查位图何时准备就绪,最简单的方法是用如下方式变换方法:
async Task<bool> myMethod(myParamter) {
//DO Something
return true;
}
您还必须更改调用myMethod adding async的方法的签名
改进版:
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有什么意义?这只是一个例子,通常当你下载一个文件时,你可以有两种状态:true file download,false出现一些错误,下载失败stopped@Tinwor这应该通过异常来传达。如果您从未返回除true以外的任何其他值,bool的意义何在?这只是一个例子,通常当您下载文件时,您可以有两种状态:true file download,false一些错误和download isstopped@Tinwor这应该通过例外来传达。