かなり他にネタが貯まってるんだけど、とりあえず今作ってるのの整理としてpostしておく。

XMLHttpRequest使えばいいんじゃないか、とも思ったがそんなに面倒でも無いので前のを非同期化してみた。

Download => Org.Shokai.Web.AsyncWebRequest.cs

VisualStudio2005Pro / C#2.0環境で動作確認。

Thread使ってるのでHTTPリクエスト中もGUIが固まらない。

■使い方(簡単に)

AsyncWebRequestにResponseというクラスを引数に持つcallback関数を登録して、

get(); すればデータ全部受信した時にcallbackが呼ばれる。Response.contentの中にHTML全部入ってる。

■使い方

usingOrg.Shokai.Web;

AsyncWebRequestasyncReq=newAsyncWebRequest();

asyncReq.encoding=Encoding.UTF8;

asyncReq.sleepTime=1;

sleepTimeとエンコードは自動的に初期化されるので、省略して構わない。

コールバック関数をどこかに書いておく。

publicvoidonAsyncResponse(Responseres)

{

Console.WriteLine(res.content);//受信したデータ

}

さあ、さきほどのコールバック関数を登録して、いざ呼び出したまえ!

asyncReq.onResponse+=onAsyncResponse;

asyncReq.get(newUri(“http://shokai.org”));

レスポンスはResponse.bodyの中に入ってるので、コールバック関数の中で適当に料理してね。



ちなみに君はcallbackを以下のように書いてもいいし、書かなくてもいい。

ResponseDelegateresDel=delegate(Responseres)
{
Console.WriteLine(res.content);
};
asyncReq.onResponse+=resDel;

asyncReq.onResponse+=(ResponseDelegate)delegate(Responseres)
{
Console.WriteLine(res.content);
};

俺はコレ↑かな

参考:s.h.log: C#2.0 – 無名関数をControl.Invoke()する