22

インターネットからファイルをダウンロードするために 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. 私はそれを Uri にキャストしようとしましたが、それもうまくいきません。
  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));  
    }
    
4

5 に答える 5

8

さて、他の人があなたのURIがコードで有効であることを証明し、コンパイルなどが行われ、実行時に生成されることにも言及している場合は、実行時に生成しているUriStringが無効であり、あなたが何であるかではない可能性があります期待?

無効な文字列からUriを作成しようとしたときに例外をスローする代わりに、Uriクラスで次のメソッドIsWellFormedUriStringを提案します。

string uriString = "your_UriString_here";

if (Uri.IsWellFormedUriString(uriString, UriKind.Absolute))
{
    Uri uri = new Uri(uriString);
}
else
{
    Logger.WriteEvent("invalid uriString: " + uriString);
}

デバッグにも役立つ可能性があります。

于 2010-04-27T10:26:59.263 に答える
5
objimage = new MemoryStream(wc.DownloadData(new Uri(photo.MediumUrl)));

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

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

于 2009-09-23T12:29:25.213 に答える
5
var yourUri = new UriBuilder(yourString).Uri;

したがって、あなたの例は次のようになります。

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

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

それが役立つことを願って、

ダン

于 2009-09-23T12:30:31.363 に答える
0

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

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

動作するはずです。

于 2009-09-23T12:31:42.193 に答える