Prathap S V Ответов: 1

Приложение c# winforms.threadexception не срабатывает во второй раз


Всем Привет,
У меня возникла проблема при попытке поймать рекурсивное исключение, надеюсь, кто-то сможет помочь.
Вот мой код Program. cs, настроенный для обработки исключений.
static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);            Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
            Application.ThreadException += Application_ThreadException;

            Application.Run(new Form1());
        }

Вот пример использования.
1. пользователь загрузит форму 1, и там я ожидаю, что какое-то исключение может произойти из-за ошибок загрузки данных.
private void Form1_Load(object sender, EventArgs e)
{throw new Exception("Data Load Error");}


2. Тогда это будет хит
Application_ThreadException;
событие и там мы пытаемся закрыть форму и перезагрузить ее еще раз.

 static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {
             Form currentForm = GetActiveMainForm();
            if (currentForm != null)
            {
string formToOpen = currentForm.Name;
currentForm.BeginInvoke(new MethodInvoker(currentForm.Close));
                object form = Assembly.GetEntryAssembly().CreateInstance("ExceptionHandling." + formToOpen);
                (form as Form).Show();
}

}

Пока все работает нормально. Сейчас
3. Когда я перезагружаю форму, она должна выдать то же самое исключение и
Application_ThreadException
должен ли огонь и этот процесс предполагаться
это происходит рекурсивно.
Первая загрузка= & gt;ошибка= & gt;CloseAndReLoad= & gt;ошибка= & gt;CloseAndReload= & gt;ошибка.. так далее..
HERE , I am trying to check if data load fails 3 times , then close the Module/Form

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

Я пытаюсь выяснить первопричину такого поведения, но не могу.

Надеюсь, кто-нибудь прольет здесь немного света, если я что-то упустил или это ожидаемое поведение по умолчанию?

Заранее спасибо,
Пратхап

Что я уже пробовал:

Я уже пробовал устанавливать
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);

который обрабатывает исключение (используя AppDomain.CurrentDomain.UnhandledException event) рекурсивно, но даже после обработки исключения он не будет выходить и продолжать выдавать одно и то же исключение.

1 Ответов

Рейтинг:
0

Prathap S V

Это не помогло, событие ThreadException не срабатывает во второй раз так же, как и выше.

Graeme_Grant

вы пробовали их пример кода в новом проекте?

Prathap S V

да, этот пример кода, как он есть, будет работать. Но я изменил его в соответствии с моими требованиями, то есть я ожидаю исключения при событии Load и пытаюсь повторно загрузить эту форму в течение 3 раз через событие Application_ThreadException. Даже после 3 раз, если я все еще получаю исключение в загрузке формы, то я хочу закрыть эту форму, которая все еще не работает.

Graeme_Grant

Я по уши увяз в сложном Xml-программировании atm, так что у меня нет времени выпекать макет с нуля. Разместите ссылку на загружаемый образец (удалите папки bin &obj), и я включу его и посмотрю, смогу ли быстро определить, где вы ошибаетесь.

Prathap S V

Я поделился образцом, который вы можете скачать здесь.
http://wikisend.com/download/617932/ExcHandling.rar