我正在创建的程序有一些图片框。 这些图像不会添加到资源中,而是我想从网站加载它们。 它到目前为止工作正常,最大的问题是程序崩溃,如果它无法加载图像。 我搜索了这个问题,似乎让图像异步是解决这个问题的正确方法。
目前这是我加载图片的方式:
private static Image GetImageFromURL(string url)
{
HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
HttpWebResponse httpWebReponse = (HttpWebResponse)httpWebRequest.GetResponse();
Stream stream = httpWebReponse.GetResponseStream();
return Image.FromStream(stream);
}
...
foo.Image = GetImageFromURL("https://foo.com/bar.jpg");
我在SO和其他网站上阅读了很多帖子,但我仍然不理解异步。我真的希望这里的某个人可以尝试解释如果使用async是正确的方法。
抱歉我的英文不好,我希望不要难以理解。
答案 0 :(得分:1)
一般情况下,使用.NET内置对象(希望按惯例使用任何对象),只需使用Async
对应方法即可使用“async”版本。
例如,而不是:
HttpWebResponse httpWebReponse = (HttpWebResponse)httpWebRequest.GetResponse();
你会有这个:
HttpWebResponse httpWebReponse = (HttpWebResponse)(await httpWebRequest.GetResponseAsync());
请注意在方法调用found here上添加Async
,以及添加await
关键字。后一种变化也需要改变方法签名:
private static async Task<Image> GetImageFromURL(string url)
任何调用它的方法都必须改变:
Image someImage = await GetImageFromURL(someUrl);
异步操作应该一直持续到顶层。 (说这个的常见方式是它应该“一直异步”。)
方法为async
后,您可以根据需要在其中进行尽可能多的await
操作。您当前正在调用的其他一些方法也可能具有Async
个等效项,因此您可以对它们执行相同的操作。