2016-09-24 7 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 фильтруется и, когда я запускаю этот код, исключений не будет, кроме того, программа не отображает сообщение «Я здесь!»; Что случилось?Исключение не выбрано

Я хочу использовать этот код в timer_tick каждые 1 минуту и ​​обновлять ярлык ui с живым статусом. есть ли у вас альтернативный путь?

+0

Что вы подразумеваете под «фильтром»? Что вы видите, если вы вводите URL-адрес в браузер? – Krumelur

+0

Должно быть вызвано одно из MessageBox.Show(), поэтому, похоже, они не выполняют то, что вы ожидаете от них. Можете ли вы поставить точку останова на них обоих, чтобы увидеть, что называется? В зависимости от того, как выполняется фильтрация, возможно, что исключение не будет выбрано, даже если вы не можете получить доступ к веб-сайту. – LittleDebugger

+0

Что заставляет вас думать, что он должен * выкинуть исключение? Просто потому, что сайт заблокирован, это не означает, что весь запрос завершается с ошибкой. Вероятно, запрос перенаправляется на «заблокированную» страницу, и/или код HTTPStatus не 200 – Rob

ответ

0

Я предполагаю, что значение интервала timer_tick() меньше значения тайм-аута по умолчанию для веб-запроса, а затем следующего раунда таймера, выполненного до завершения текущего раунда. поэтому использовать тайм-аут для вашего запроса также лучше использовать задачу, чтобы не замораживать ui при запуске таймера.

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); 
Смежные вопросы