URLを指定してページタイトルを取得するプログラムを作成しようとしています。 AsyncCallbackを使用していないときに動作するコードを記述しましたが、AsyncCallbackを使用するとコードが動作しないようです。AsyncHttpWebRequest(Webページタイトル取得プログラム)
public void GetWebPageTitle(string URL)
{
// make request for web page
HttpWebRequest myWebRequest = (HttpWebRequest)HttpWebRequest.Create(URL);
myWebRequest.Method = "GET";
myWebRequest.BeginGetResponse(new AsyncCallback(FinishWebRequest), myWebRequest);
zConsole.WriteLine("Beginning HttpWebRequest for: " + URL);
}
void FinishWebRequest(IAsyncResult result)
{
zConsole.WriteLine("...");
string title = "Unknown";
//Code under here doesnt get extcuted
HttpWebResponse myWebResponse = (HttpWebResponse)((HttpWebRequest)result.AsyncState).EndGetResponse(result);
StreamReader myWebSource = new StreamReader(myWebResponse.GetResponseStream());
string source = "";
source = myWebSource.ReadToEnd();
myWebResponse.Close();
title = Regex.Match(source, @"\<title\b[^>]*\>\s*(?<Title>[\s\S]*?)\</title\>", RegexOptions.IgnoreCase).Groups["Title"].Value;
zConsole.WriteLine(title);
}
ありがとうございます。
「コードは機能していない」とはどういう意味ですか? 'FinishWebRequest'メソッドはこれまで呼ばれていますか?それは空のタイトルを書いていますか? –
@jimMischel私のプログラムをテストした後、もう少し私はFinishWebRequestメソッドが決して呼び出されないことを理解しました。(VSはFinishWebRequestメソッドのブレークポイントで停止したので、前に混乱しました)私は、非同期とスレッディングにはとても新しいことが分かります。 – zaza
@zaza良いものは、FinishWebRequestメソッドのほぼ標準的な例です。タイトルを抽出する正規表現も大丈夫です。あなたが取得しているエラーを指定することはできますか?あなたの答えに出力/エラーを追加するかもしれませんか? – Abbas