酢ろぐ!

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

Windows PhoneでWebClientを使ってWebページを取得する

ウェブコンテンツをダウンロードする場合、WebClientクラスを使用すると簡単です。

WebClientを使ってWebページを取得する

ダウンロード完了処理をイベントハンドラでおこなう

DownloadStringCompletedイベントハンドラを設定しておいて、DownloadStringAsyncメソッドで非同期ダウンロードを開始します。

// using System.Net;
// using Microsoft.Phone.Reactive;

// 一番シンプルなケース
private void button1_Click(object sender, RoutedEventArgs e) {
    var client = new WebClient();
    client.DownloadStringCompleted += client_DownloadStringCompleted;

    // ダウンロードを開始する
    client.DownloadStringAsync(new Uri("http://search.twitter.com/search.atom?q=ch3cooh"));
}

// ダウンロードが完了すると通知されるイベントハンドラ
void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) {
    MessageBox.Show(e.Result);
}

Reactive Extensionsを使ってダウンロードしたデータを処理する

以下のソースコードの通り、Rxを使うとダウンロードした後の処理も含めてClickイベントハンドラ内で書いてしまうことができます。

Rxを使うには、あらかじめソリューションエクスプローラーにて[参照の追加]を選択し、参照の追加ダイアログを表示させ「System.Observable」と「Microsoft.Phone.Reactive」を選択しておきます。

// using System.Net;
// using Microsoft.Phone.Reactive;

// Rxを使ったケース
private void button2_Click(object sender, RoutedEventArgs e) {

    var client = new WebClient();
    Observable.FromEvent<DownloadStringCompletedEventArgs>(client, "DownloadStringCompleted")
        .Select(evt => evt.EventArgs.Result)
        .Subscribe((msg => MessageBox.Show(msg)));

    // ダウンロードを開始する
    client.DownloadStringAsync(new Uri("http://search.twitter.com/search.atom?q=ch3cooh"));
}