酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Windows PhoneでWebClientを使ってバイナリデータをダウンロードする

WebClientクラスを使ってURLが指すバイナリデータをダウンロードする場合などに使えます。

ウェブ上のデータの読み込みが完了するとOpenReadCompletedイベントが発生しますのでイベントハンドラを追加して、OpenReadAsyncメソッドで指定したリソースへのストリームを開きます。

// ファイルをバイナリとして保存する
private void button4_Click(object sender, RoutedEventArgs e)
{
    // ダウンロードを開始する
    var client = new WebClient();
    client.OpenReadCompleted += client_OpenReadCompleted;
    client.OpenReadAsync(
        new Uri("http://cdn1.www.st-hatena.com/users/ch/ch3cooh393/profile.gif"));
}

ウェブ上のリソースがダウンロード可能な状態になると、以下のイベントハンドラが呼び出されます。リソースを読み込みながら分離ストレージに書き込み処理をおこなっています。

// ウェブ上のリソースをダウンロード出来るようになると通知されるイベントハンドラ
void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
    // エラーチェック
    if (e.Error != null)
    {
        return;
    }

    // ダウンロードしたデータを分離ストレージに保存する
    using (var store = IsolatedStorageFile.GetUserStoreForApplication())
    using (var strmWriter = store.CreateFile("icon991.png"))
    {
        var bytes = new byte[128];
        int readed = 0;
        while (true)
        {
            // ダウンロードデータを読み込む
            readed = e.Result.Read(bytes, 0, bytes.Length);
            if (readed == 0) break;
            // 分離ストレージへ書き出し
            strmWriter.Write(bytes, 0, readed);
        }
    }
}

関連記事

blog.ch3cooh.jp