web-dev-qa-db-ja.com

System.StringをSystem.Uriに変換できません

私はインターネットからファイルをダウンロードするために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に変換する方法です。

私が試したもの

  1. 私はそれをウリにキャストしようとしましたが、それもうまくいきません。
  2. 私は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));  
    }
    _
13
dezkev

これは問題なく動作します。

System.Uri uri = new System.Uri("http://farm4.static.flickr.com/2232/2232/someimage.jpg");

ところで; new uri(...、小文字のuriを使用した表現)の入力を間違えたようです。これは問題ではありません。「new Uri」である必要があるためです。

29
Digitalex

さて、他の人があなたの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);
}

デバッグにも役立ちます。

6
Peter Kelly
objimage = new MemoryStream(wc.DownloadData(new Uri(photo.MediumUrl)));

b)私はUri myuri = new uri(string)を試しました-上記のようにエラーが出ます。

これは文字列からUriを作成する通常の方法です...文字列が有効なURIである場合に機能しない理由がわかりません

5
Thomas Levesque
var yourUri = new UriBuilder(yourString).Uri;

だからあなたの例は:

wc.DownloadDataAsync(new UriBuilder(photo.MediumUrl).Uri);
objimage = new MemoryStream(wc.Result);

操作が完了したことを確認するには、チェックインが必要な場合があります。

それが役に立てば幸い

ダン

4
Daniel Elliott

私があなたのコードを正しく理解しているなら、

wc.DownloadDataAsync(new Uri(photo.MediumUrl));

うまくいくはずです。

0
Mitch Wheat