私はインターネットからファイルをダウンロードするために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));
}
_
これは問題なく動作します。
System.Uri uri = new System.Uri("http://farm4.static.flickr.com/2232/2232/someimage.jpg");
ところで; new uri(...、小文字のuriを使用した表現)の入力を間違えたようです。これは問題ではありません。「new Uri」である必要があるためです。
さて、他の人があなたのURIが彼らのコードで有効であることを証明し、それがコンパイルされると思います、そしてあなたはそれが実行時に生成されることも言及します-実行時に生成しているUriStringがあなたのものではなく無効であるかもしれません期待してる?
無効な文字列からUriを作成しようとしたときに例外がスローされるのではなく、次のメソッドIsWellFormedUriStringriクラスをお勧めします。
string uriString = "your_UriString_here";
if (Uri.IsWellFormedUriString(uriString, UriKind.Absolute))
{
Uri uri = new Uri(uriString);
}
else
{
Logger.WriteEvent("invalid uriString: " + uriString);
}
デバッグにも役立ちます。
objimage = new MemoryStream(wc.DownloadData(new Uri(photo.MediumUrl)));
b)私はUri myuri = new uri(string)を試しました-上記のようにエラーが出ます。
これは文字列からUriを作成する通常の方法です...文字列が有効なURIである場合に機能しない理由がわかりません
var yourUri = new UriBuilder(yourString).Uri;
だからあなたの例は:
wc.DownloadDataAsync(new UriBuilder(photo.MediumUrl).Uri);
objimage = new MemoryStream(wc.Result);
操作が完了したことを確認するには、チェックインが必要な場合があります。
それが役に立てば幸い
ダン
私があなたのコードを正しく理解しているなら、
wc.DownloadDataAsync(new Uri(photo.MediumUrl));
うまくいくはずです。