我正在使用Web客户端类从互联网上下载文件(实际上是Flickr)。
只要我使用WebClient().DownloadData(string)
,这就可以正常工作,但这会锁定UI,因为它不是异步的。
然而,当我尝试WebClient().DownloadDatAsync(string)
时,我收到编译错误:
“无法将System.String转换为System.Uri”。
字符串MediumUrl返回"http://farm4.static.flickr.com/2232/2232/someimage.jpg"
所以问题是如何将字符串"http://farm4.static.flickr.com/2232/2232/someimage.jpg"
转换为Uri。
我尝试过的事情 -
我尝试了Uri myuri = new uri(string)
- 错误如上所述。
foreach (Photo photo in allphotos)
{
//Console.WriteLine(String.Format("photo title is :{0}", photo.Title));
objimage = new MemoryStream(wc.DownloadData(photo.MediumUrl));
images.Add(new Pictures(new Bitmap(objimage), photo.MediumUrl, photo.Title));
}
答案 0 :(得分:29)
这很好用;
System.Uri uri = new System.Uri("http://farm4.static.flickr.com/2232/2232/someimage.jpg");
顺便说一下;我注意到你错误输入了新的uri表达式(......,用小写的uri。这不是你的问题,是吗?因为它应该是“新的Uri”。
答案 1 :(得分:6)
好的,所以我想如果其他人已经证明你的URI在他们的代码中是有效的并且它编译等等你还提到它是在运行时生成的 - 可能是你在运行时生成的UriString是无效的而不是你期待什么?
我建议在 Uri 类上建议使用以下方法 IsWellFormedUriString ,而不是因为尝试从无效字符串创建Uri而抛出异常。
string uriString = "your_UriString_here";
if (Uri.IsWellFormedUriString(uriString, UriKind.Absolute))
{
Uri uri = new Uri(uriString);
}
else
{
Logger.WriteEvent("invalid uriString: " + uriString);
}
也可以帮助您进行调试。
答案 2 :(得分:5)
objimage = new MemoryStream(wc.DownloadData(new Uri(photo.MediumUrl)));
b)我尝试过Uri myuri = new uri(string) - 错误如上所述。
这是从字符串创建Uri的常用方法...如果字符串是有效的URI,我不明白为什么它不起作用
答案 3 :(得分:4)
var yourUri = new UriBuilder(yourString).Uri;
所以你的例子是:
wc.DownloadDataAsync(new UriBuilder(photo.MediumUrl).Uri);
objimage = new MemoryStream(wc.Result);
您可能需要办理登机手续才能看到操作已经完成。
希望有所帮助,
丹
答案 4 :(得分:0)
如果我正确理解您的代码,那么
wc.DownloadDataAsync(new Uri(photo.MediumUrl));
应该有用。