什么时候我的异步功能完成了

时间:2014-11-06 09:59:56

标签: c# function asynchronous bitmap void

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

  1. A string url
  2. Bitmap对象
  3. 然后,该函数从文件缓存,内存缓存中检索url,或者异步从网站下载URL。

    我的问题是:如何在Bitmap对象填充图像时告知我何时可以在代码中使用此Bitmap图像?

    提前致谢。

2 个答案:

答案 0 :(得分:3)

没有简单的方法可以了解 async void 方法何时完成。将方法的返回类型从void更改为Task。返回指示操作何时完成的任务。

然后等待Task在客户端代码中完成很简单。只要Task完成,您就可以使用Bitmap

如果您从某个来源下载位图,理想情况下应该返回Task<Bitmap>而不是将Bitmap作为参数并进行修改。 (如果我理解错误,请忽略它。)

答案 1 :(得分:1)

如果你想在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;
}