2011-12-23 9 views
0

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); 
} 

ありがとうございます。

+0

「コードは機能していない」とはどういう意味ですか? 'FinishWebRequest'メソッドはこれまで呼ばれていますか?それは空のタイトルを書いていますか? –

+0

@jimMischel私のプログラムをテストした後、もう少し私はFinishWebRequestメソッドが決して呼び出されないことを理解しました。(VSはFinishWebRequestメソッドのブレークポイントで停止したので、前に混乱しました)私は、非同期とスレッディングにはとても新しいことが分かります。 – zaza

+0

@zaza良いものは、FinishWebRequestメソッドのほぼ標準的な例です。タイトルを抽出する正規表現も大丈夫です。あなたが取得しているエラーを指定することはできますか?あなたの答えに出力/エラーを追加するかもしれませんか? – Abbas

答えて

1

私は、非同期の結果が返される前に、問題はプログラムが終了すると思います。 Console.Writelineを実行した後のメインスレッドが死ぬ。

残りは大丈夫です。 BeginGetResponse at MSDN

+0

oppsは、GUIアプリケーション – zaza

0

コールバック内のコードの周りにtry/catchブロックを置き、そこに何か例外がスローされているかどうかを確認します。

それ以外の場合は、さらに詳細が役立ちます。コードが実行されないと言うと、実際にコードを実行する/ブレークポイントを使用しているか、コンソール出力に基づいていると仮定していますか?このリクエストはアプリケーションのメインウィンドウのスレッドから行われますか?

関連する問題