2015-08-03 3 views
0

У меня возникли проблемы с созданием методов обработки ошибок. После того, как вы встретили ошибку, суб-продолжение продолжается, как будто ничего не произошло. Это то, что у меня есть:Функция останова после исключения

try 
{ 
    int numericID = Convert.ToInt32(titleID); 
} 
catch(Exception) 
{ 
    errorHandling("Invalid Title"); 
} 

void errorHandling(string error) 
{ 
    MessageBox.Show("You have encountered an error: " + error, "Error"); 
    return; 
} 

Заранее благодарен!

+0

Вы получаете исключение, а затем вызываете другой метод. Если вы не хотите продолжать, вы должны либо возвратить, либо перебросить исключение после вызова 'errorHandling'. –

+0

Это то, что происходит, когда вы ловите и обрабатываете исключение. Не используйте методы в блоках catch catch, если вы хотите, чтобы они делали исключения и прерывали программу. – dougajmcdonald

+1

ОК, вы выбрали исключение, обработали его, показывая сообщение об ошибке. Что ты хочешь делать дальше. Ваш код ничего не показывает об этом. – EZI

ответ

6
try 
    { 
     int numericID = Convert.ToInt32(titleID); 
    } 
    catch(Exception) 
    { 
     errorHandling("Invalid Title"); 
     return; // <---- perhaps you wanted to put the return here? 
    } 

void errorHandling(string error) 
{ 
    MessageBox.Show("You have encountered an error: " + error, "Error"); 
    // return; <-- does nothing 
} 

Это код в других функциях, которые вы хотите разрушить при выполнении исключения Просто сделайте глобальное логическое значение:

bool exceptionCaught = false; 

.... 

try 
    { 
     int numericID = Convert.ToInt32(titleID); 
    } 
    catch(Exception) 
    { 
     errorHandling("Invalid Title"); 
     exceptionCaught = true; 
     return; // <---- perhaps you wanted to put the return here? 
    } 

void errorHandling(string error) 
{ 
    MessageBox.Show("You have encountered an error: " + error, "Error"); 
    // return; <-- does nothing 
} 

.... 

void OtherMethod() 
{ 
    if(!exceptionCaught) 
    { 
     // All other logic 
    } 
} 
+0

Это все еще позволяет выполнить код после запуска ошибки. Если у меня есть больше кода, который должен быть запущен после инструкции try catch, я бы хотел, чтобы это было возможно только в том случае, если не выбрано исключение. Если есть исключение, код завершается и позволяет пользователю повторно взаимодействовать с формой. Edit: Ах, я вижу, что return выйдет из метода cuttent, но если оператор catch catch вызывается из вторичного метода, я должен дважды использовать return. Спасибо за помощь! –

1

Что вы, хотите, чтобы это произошло?

Некоторые общие вещи бурлит исключение ...

try 
    { 
     int numericID = Convert.ToInt32(titleID); 
    } 
    catch(Exception) 
    { 
     errorHandling("Invalid Title"); 

     // rethrow the error after you handle it 
     // 
     throw; 
    } 

Или вы можете зарегистрировать ошибку в методе errorHandling().

Или вы можете указать return из вашего родительского метода, в котором было отправлено исключение.

В любом случае, вы catch ING исключение, и вы errorHandling() выполнения метода, но в этот момент catch блок делается с его исполнением ... так код продолжает.

Все, что вы хотите, чтобы это произошло ... , чтобы это произошло в блоке поймать, или вы просто глушителей ошибки. Если вы не хотите, чтобы выполнение продолжалось, не разрешайте выполнение продолжить, но вам нужно явно написать код для этого в блоке catch.

+0

После обнаружения ошибки я хотел бы отобразить ее пользователю (errorHandling), а затем остановить код, полностью разрешив пользователю снова взаимодействовать с формой и устранить проблему, вызвавшую ошибку. –

+1

@MasonHanson Затем вы просто хотите «вернуться» либо в конце блока 'catch'. –

+0

Работал, спасибо! –

-1

Вы вызываете метод после того, как поймаете исключение. Если вы хотите завершить программу, вам нужно либо перестроить исключение после вызова ошибкиHandling, либо вызвать System.Environment.Exit(1);, чтобы завершить программу.

-1

Я думаю, что если вы добавите перерыв; к исключению, он может исправить вашу проблему. Или вы также можете попробовать использовать бросок.

0

return заявление в конце вашего метода errorHandling не прервать программу. Для завершения вам необходимо вызвать Application.Exit или System.Environment.Exit в зависимости от типа вашего приложения.

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