2015-01-13 2 views
0

Я хочу пойти один раз через цикл, но только если исключение будет отправлено обратно через цикл. Как я могу написать это в vb.net? Я пытаюсь сделать веб-запрос с использованием прокси-сервера. Вот код, который у меня есть до сих пор, который в настоящее время не работает.Петля до каких-либо исключений

Public Sub checkproxy() 

    Dim myWebRequest As WebRequest = WebRequest.Create("http://www.contoso.com") 
    Dim myProxy As New WebProxy() 
    Dim proxyAddress = "http://www.example.com:8080" 
    Dim newUri As New Uri(proxyAddress) 
    myProxy.Address = newUri 
    myWebRequest.Proxy = myProxy 
    Dim switch As String = "b" 
    Dim myWebResponse As WebResponse 
    Do Until switch = "a" 
     Try 
      myWebRequest.GetResponse() 
      switch = "a" 
     Catch ex As Exception 
      System.Threading.Thread.Sleep(5000) 
     End Try 
    Loop 
    RichTextBox1.Text = myWebResponse.Headers.ToString 
    myWebResponse.Close() 
    ToolStripStatusLabel1.Text = "Connected" 
End Sub 
+1

Я отредактировал ваше название. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

+0

Я не знал, спасибо. –

ответ

2

Exit Do является то, что вы ищете:

Do Until switch = "a" 
    Try 
     myWebRequest.GetResponse() 
     switch = "a" 
     Exit Do 
    Catch ex As Exception 
     System.Threading.Thread.Sleep(5000) 
    End Try 
Loop 
+0

Программа по-видимому, по какой-то причине висит. Будет ли это связано с частью веб-запроса? Я прокси-сервер остановился, когда я вызываю checkproxy(), затем я жду 10 секунд и запускаю прокси-сервер, однако программа продолжает зависать. –

+0

отладчик - ваш друг. – MarcinJuraszek

+0

Все отсортированные благодарности за ваш ответ помогли. –

0

я нуждался в Exit Do, как указано в MarcinJuraszek ответ я также необходимые для создания WebRequest в функции Ьгу, а не в начале кода. Вот обновление рабочего кода.

Public Sub checkproxy() 

    Dim myWebRequest As WebRequest 
    Dim myProxy As New WebProxy() 
    Dim proxyAddress = "http://www.example.com:8080" 
    Dim newUri As New Uri(proxyAddress) 
    myProxy.Address = newUri 
    Dim switch As String = "b" 
    Dim myWebResponse As WebResponse 
    Do Until switch = "a" 
     Try 
      myWebRequest = WebRequest.Create("http://www.contoso.com") 
      myWebRequest.Proxy = myProxy 
      myWebResponse = myWebRequest.GetResponse() 
      switch = "a" 
      Exit Do 
     Catch ex As Exception 
      System.Threading.Thread.Sleep(5000) 
     End Try 
    Loop 
    RichTextBox1.Text = myWebResponse.Headers.ToString 
    myWebResponse.Close() 
    ToolStripStatusLabel1.Text = "Connected" 
End Sub 
1

На самом деле все, что вам нужно сделать, это изменить ваш Do Until ... Loop к Do ... Loop Until, который всегда будет выполняться цикл один раз, а затем проверить состояние цикла перед повторным выполнением цикла:

Do 
    Try 
     myWebRequest.GetResponse() 
     switch = "a" 
    Catch ex As Exception 
     System.Threading.Thread.Sleep(5000) 
    End Try 
Loop Until switch = "a" 

См Do Loop page для синтаксиса и дальнейшие разъяснения

Смежные вопросы