C# 我的异步函数什么时候完成

C# 我的异步函数什么时候完成,c#,function,asynchronous,bitmap,void,C#,Function,Asynchronous,Bitmap,Void,我编写了一个C void异步函数,该函数采用以下参数: 字符串url 位图对象 然后,该函数从文件缓存、内存缓存中检索url,或从网站异步下载url 我的问题是:当位图对象已填充图像时,如何通知我,以便在代码中使用此位图图像 提前感谢。不容易知道异步void方法何时完成。将方法的返回类型从void更改为Task。返回指示操作何时完成的任务 然后在客户端代码中等待任务完成就很简单了。一旦任务完成,您就可以使用位图 若从某个源下载位图,最好返回任务,而不是将位图作为参数传递并修改它。如果我理解错误,

我编写了一个C void异步函数,该函数采用以下参数:

字符串url 位图对象 然后,该函数从文件缓存、内存缓存中检索url,或从网站异步下载url

我的问题是:当位图对象已填充图像时,如何通知我,以便在代码中使用此位图图像


提前感谢。

不容易知道异步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这应该通过例外来传达。