2009-09-23 20 views
8

Webクライアントクラスを使用してインターネットからファイルをダウンロードしています(実際にはFlickr)。 これは私が使用している限り正常に動作します:WebClient().DownloadData(string)しかし、これは非同期であるためUIをロックします。System.StringをSystem.Stringに変換できません

しかし、WebClient().DownloadDatAsync(string)を試すと、コンパイルエラーが発生します。 "System.StringにSystem.Stringを変換できません"。

文字列MediumUrlは、そこで問題は、私がウリに文字列を変換"http://farm4.static.flickr.com/2232/2232/someimage.jpg"行う方法です"http://farm4.static.flickr.com/2232/2232/someimage.jpg"

を返します。

物事は私がウリにキャストしようとしていtried-

  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)); 
    } 
    
+0

.NET Frameworkのどのバージョンを使用していますか?それはコンパクトなフレームワークですか? –

+0

@Dave Rook:リストのコードをインデントするには、各行を8つのスペースでインデントする必要があります。これはMarkdownの特徴です。 http://meta.stackexchange.com/questions/3792/how-to-nest-code-within-a-list-using-markdownを参照してください。 – BoltClock

+0

@Dave Rook:この投稿を編集して、何週間前に(私はあなたにpingすることができた方法でした)。そこには少しの遅れがありますが、私はあなたに関係なく知らせると思っていました。 – BoltClock

答えて

5
objimage = new MemoryStream(wc.DownloadData(new Uri(photo.MediumUrl))); 

b) I have tried Uri myuri = new uri(string) - errors out as above.

文字列が有効なURIであるならば、それは動作しないだろう理由は、文字列からURIを作成するための通常の方法です...私は表示されません

+0

ありがとうございます。 それも試しました(上記の申し訳ありませんでした) - サイコロはありません。コンパイルエラー。 – dezkev

+3

コンパイルエラーは何ですか? –

+0

私のプロジェクトでOKをビルドしました –

1
var yourUri = new UriBuilder(yourString).Uri; 

だからあなたの例では、次のようになります。

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

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

希望、

ダン

+0

申し訳ありませんが動作します。 コンストラクタを解決できません:メモリストリーム(void)の候補は次のとおりです。 MemoryStream(byte [])(クラスメモリストリーム) memoryStream(クラスメモリストリーム) – dezkev

+0

public void DownloadDataAsync(System .Uri address) System.Net.WebClientのメンバー 要約: 指定されたリソースをSystem.Byte配列としてダウンロードします。このメソッドは呼び出しスレッドをブロックしません。 パラメータ: アドレス:ダウンロードするURIを含むSystem.Uri。 – dezkev

0

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

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

が動作するはずです。

+0

はい、私はAsyncメソッドを使いたいですが、私はその文字列がUriのものであるためにできません。上記のメソッドは正常に動作します。 – dezkev

20

これは正常です。

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

ところで、私はあなたに新しいuriの表現をミスタイプしたことに気付きました(...、小文字のuriで...これはあなたの問題ではありません、それは新しいUriでなければならないからです)

+0

いいえ、ここに入力するだけで、自分のコードにタイプミスはありません。 また、UR1は実行時に動的に生成されます。 – dezkev

5

URIはコード内で有効でコンパイルされ、実行時に生成されると言います。実行時に生成するUriStringは無効であり、期待していないものかもしれません。

例外無効な文字列からUriを作成しようとするとスローされますが、私は次のメソッドを提案しますUriクラス

string uriString = "your_UriString_here"; 

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

デバッグにも役立つ場合があります。

関連する問題