2012-01-14 3 views
-1

Я создал программу, которая в какой-то момент должна войти на какой-либо веб-сайт. Если что-то пойдет не так, я хочу, чтобы он подождал некоторое время, скажем 2 секунды, а затем повторите попытку. поэтому функция выглядит примерно так:Исключение StackOverFlow, альтернативы для моей функции?

public void log_in() 
{ 
    try 
    { 
     //login code 
    } 
    catch 
    { 
     Thread.Sleep(2000); 
     log_in(); 
    } 
} 

Но этот код начал давать мне StackOverFlowExeptions время от времени. Кто-нибудь знает, как это решить?

ответ

1

Вы получаете исключение переполнения стека, потому что каждый раз, когда вы вызываете log_in(), вы добавляете функцию в стек. Это так:

public void log_in() 
{ 
    while (true) { 
     try 
     { 
      //login code 
      return; 
     } 
     catch 
     { 
     } 
    } 
} 
0

Что происходит, потому что, если код не может войти вообще, он все время создает новый вызов функции в стеке. Следующий код будет работать:

public void log_in() 
{ 
    while(true) { 
     try { 
      //login code 
      return; 
     } 
     catch { 
      Thread.Sleep(2000); 
     } 
    } 
} 

Но в целом вы не должны пытаться войти в бесконечно, после нескольких ошибок отчета времени для пользователя/администратора.

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