2016-09-24 21 views
1
try 
{ 
    WebRequest request = WebRequest.Create("http://facebook.com"); 
    HttpWebResponse response = (HttpWebResponse) request.GetResponse(); 

    MessageBox.Show("I am here!");  // Not run     
} 
catch (Exception ex) 
{ 
    MessageBox.Show("Error Occurred!"); //Not run! 
} 

私の国ではFacebookがフィルタリングされています。このコードを実行すると、例外はスローされません。また、プログラムは "私はここにいます! 何が起こったのですか?例外がスローされない

このコードを1分ごとにtimer_tickで使用し、uiラベルを有効な状態で更新したいとします。別の方法がありますか?

+0

"フィルタリング済み"とはどういう意味ですか? URLをブラウザに入力するとどうなりますか? – Krumelur

+0

MessageBox.Show()の1つが呼び出される必要があります。両方にブレークポイントを設定して、どちらが呼び出されているかを確認できますか? フィルタリングの仕方によっては、Webサイトにアクセスできないのに例外がスローされない可能性があります。 – LittleDebugger

+0

あなたは例外をスローする必要があると思いますか?サイトがブロックされたという理由だけで、要求全体が失敗するわけではありません。リクエストが「ブロックされた」ページにリダイレクトされている、HTTPStatusコードが200ではない可能性があります – Rob

答えて

0

あなたのtimer_tick()のインターバル値は、Webリクエストのデフォルトのタイムアウト値より小さく、次のタイマーラウンドが現在のラウンド完了前に実行されたと推測されます。従ってあなたの要求のためにタイムアウトを使用してくださいまた、タイマーの実行時にタスクをフリーズしないようにタスクを使用する方が良いです。

Task task = Task.Factory.StartNew(() => 
{ 
    WebRequest request = WebRequest.Create("http://facebook.com"); 
    request.Timeout = 5000; 
    HttpWebResponse response = (HttpWebResponse) request.GetResponse(); 

}); 

// Run this code after successfully completing the task... 
task.ContinueWith(t => 
{ 
    websiteIsAvailable = true; 
    //Some code... 
}, TaskContinuationOptions.OnlyOnRanToCompletion); 

// Run this code after task Failure... 
task.ContinueWith(t => 
{ 
    websiteIsAvailable = false; 
    //Some code... 
}, TaskContinuationOptions.OnlyOnFaulted); 
関連する問題