2016-06-13 2 views
1

У меня есть две формы. У моей первой формы есть кнопка на ней, которая должна загружать вторую форму при нажатии кнопки. Вторая форма генерирует исключение в событии Load. Код, который показывает вторую форму, находится в блоке try-catch. Однако исключение не попадает в этот блок try-catch, и я получаю окно «необработанное исключение», когда я нажимаю кнопку. Вот код:Невозможно поймать исключение из формы.Показать

public partial class FirstForm : Form 
{ 
    private void button_Click(object sender, EventArgs e) 
    { 
     try 
     { 
     // Showing this form will throw an exception 
     SecondForm form = new SecondForm(); 
     form.Show(); 
     } 
     catch (Exception ex) 
     { 
     // The exception is not caught here 
     MessageBox.Show(ex.ToString()); 
     } 
    } 
} 

public partial class SecondForm : Form 
{ 
    // Throw an exception when this form is shown 
    private void form_Load(object sender, EventArgs e) 
    { 
     throw new Exception("something"); 
    } 
} 

Почему не исключение попало в мой код?

+0

[Связанное сообщение на форумах MSDN] (https://social.msdn.microsoft.com/Forums/vstudio/en-US/b8c82b79-47d4-42ab-abdb-ff71d67a0022/ исключение-брошено-в-formload-события не-никогда пойманное-на-язь? форум = vsdebug). Разрешение не является реальным, но может помочь –

+0

Посмотрите на [это] (http://stackoverflow.com/questions/3209706/why-the-form-load-cant-catch-exception) Вопрос SO (последний ответ). –

+0

Я пробовал эти решения, прежде чем публиковать свой вопрос. Опция «Предпочитаю 32-бит» уже была отключена в моих настройках сборки. Я на Windows 10, и этот ответ сказал, что эта проблема была исправлена ​​в Windows 8 и более поздних версиях, но у меня все еще проблема. Ответы, которые я видел, говорят об исключении, которое молчаливо проглатывается или только является проблемой во время работы отладчика, но это не то, что я испытываю. Мои исключения пузырятся и приводят к сбою программы, поэтому они не затупляются, но они не позволяют мне справляться с ними. –

ответ

0

Вы можете использовать ShowDialog (this) istead метода Show, когда вы показываете вторую форму, чтобы первая форма взяла под контроль вторую. Ни с помощью ShowDialog (это) вы не сможете исключить исключение. Я думаю, у этого вопроса уже есть ответ here

+0

Я пробовал это, и исключение все еще не попадает в мой try-catch. –