« [Windowsストアアプリ] クラウディアさんタイマー、英語対応しました | トップページ | Windows ストア アプリでマルウェアを作ってみよう!? »

2012年11月27日 (火)

Win8/WP8 の PCL で HttpWebRequest を使う

Win8/WP8 用の PCL で HttpWebRequest を使おうとすると、 GetResponseAsync() が無いので await 出来ないのですな。 かといって、 いまさら非同期実行後のコールバックを別のメソッドに書くのは、 すでに生理的に受け付けないw

そこで、 AutoResetEvent を使って、 BeginGetResponse() と EndGetResponse() を一つのメソッドに押し込んでやります。

汎用的に使いたいなら、拡張メソッドにしてやってもよし。
で、 これを使って Web からダウンロードするコードは、 こんな具合に。

ほら、素直になった♪

そして考えることは誰しも同じで、 AutoResetEvent を使ったコードをいちいち書かなくても、Bcl Async ("Async for .NET Framework 4, Silverlight 4 and 5, and Windows Phone 7.5"; Microsoft.Threading.Tasks.Extensions) を使えば OK ! Win8/WP8 用の PCL 内でも動きました。
今はβ版なのでストアに上げるコードに使うのはマズそう。 早く正式版にな~れ!

[2013/4/15 追記]
VS2012 Update2 を入れると、 PCL では BCL.Async がビルドできなくなります。 ⇒ VS2012 Update2 の落とし穴 ~ BCL.Async と PCL
[2013/4/18 追記]
BCL.Async の stable リリースが出ました。 上記の問題が解消されています。

なお、 Bcl Async を入れて HttpWebRequest を使う方法は、 「@daisuke_nomuraの日記」をどうぞ。 ⇒ 「Windows Phone 8でHttpWebRequest/Responseを使う」(2012-11-26)

|

« [Windowsストアアプリ] クラウディアさんタイマー、英語対応しました | トップページ | Windows ストア アプリでマルウェアを作ってみよう!? »

プログラミング」カテゴリの記事

* プログラミング ( Metro スタイル )」カテゴリの記事

コメント

This is just what I was looking for. Thanks!

投稿: | 2012年12月11日 (火) 12時35分

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: Win8/WP8 の PCL で HttpWebRequest を使う:

» VS2012 Update2 の落とし穴 ~ BCL.Async と PCL [biac の それさえもおそらくは幸せな日々@nifty]
いろいろ便利になった Visual Studio 2012 Update 2 ですが、 こんなところに落とし穴が! orzしかも、 アンインストールしてもダメなので、 システムの復元ポイントが残してあるならロールバックするっきゃないという… orz ^2 まぁ、 PCL と BCL.Async を組み合わせて使ってる人... [続きを読む]

受信: 2013年4月15日 (月) 20時04分

« [Windowsストアアプリ] クラウディアさんタイマー、英語対応しました | トップページ | Windows ストア アプリでマルウェアを作ってみよう!? »