Обработчик необработанных исключений в.NET 1.1

Вы просто пытались использовать список в качестве аргумента append? Или я что-то пропустил?

import numpy as np
import pandas as pd

dates = np.asarray(pd.date_range('1/1/2000', periods=8))
df1 = pd.DataFrame(np.random.randn(8, 4), index=dates, columns=['A', 'B', 'C', 'D'])
df2 = df1.copy()
df3 = df1.copy()
df = df1.append([df2, df3])

print df
26
задан Ijas Ameenudeen 20 January 2019 в 13:46
поделиться

5 ответов

О, в Windows Forms определенно необходимо быть в состоянии заставить его работать. Единственной вещью, которую необходимо не упустить, являются вещи, происходящие на различных потоках.

у меня есть старая статья Code Project здесь, которая должна помочь:

Удобная для пользователя Обработка исключений

12
ответ дан Peter Mortensen 28 November 2019 в 07:56
поделиться

AppDomain.UnhandledException является событием , а не глобальным обработчиком исключений. Это означает, что к тому времени, когда оно поднято, ваше приложение уже находится на пути к истощению, и вы ничего не можете с этим поделать, кроме как выполнять очистку и регистрацию ошибок.

То, что произошло за кулисами, таково: платформа обнаружила исключение, поднялась вверх по стеку вызовов, не нашла обработчиков, которые могли бы восстановиться после ошибки, поэтому не смогла определить, безопасно ли продолжать выполнение. Итак, он запустил последовательность завершения работы и вызвал это событие вежливости к вам, чтобы вы могли выразить свое уважение к уже обреченному процессу. Это происходит, когда исключение остается необработанным в главном потоке.

Нет единого решения этой ошибки. Вам необходимо поместить настоящий обработчик исключений (блок перехвата) перед всеми местами, где возникает эта ошибка, и направить его (например) в глобальный метод / класс обработчика, который определит, безопасно ли просто сообщать и продолжать, основываясь на тип исключения и / или содержание.

Редактировать: есть возможность отключить (= взломать) механизм сообщения об ошибках, встроенный в Windows, так что обязательное диалоговое окно «сбой и запись» не отображается при выходе из строя вашего приложения. Однако это становится эффективным для всех приложений в системе, а не только для вас самих.

5
ответ дан Ishmaeel 28 November 2019 в 07:56
поделиться

Поведение необработанного исключения в.NET 1.x приложение Windows Forms зависит от:

  • тип потока, который выдал исключение
  • , Произошло ли во время сообщения окна, обрабатывающего
  • , Был ли отладчик присоединен к процессу
  • установка
  • реестра DbgJitDebugLaunchSetting флаг jitDebugging в Приложении. Конфигурация
  • , Переопределили ли Вы обработчик исключений Windows Forms
  • , Обработали ли Вы событие
  • исключения CLR’s фаза луны

поведение по умолчанию необработанных исключений:

  • , Если исключение происходит на основном потоке при нагнетании сообщений окна, это прерывается обработчиком исключений Windows Forms.
  • , Если исключение происходит на основном потоке при нагнетании сообщений окна, это завершит процесс приложения, если это не будет прервано обработчиком исключений Windows Forms.
  • , Если исключение происходит на руководстве, пуле потоков или потоке финализатора, это глотает CLR.

точки контакта для необработанного исключения:

  • обработчик исключений Windows Forms.
  • переключатель реестра отладки JIT DbgJitDebugLaunchSetting.
  • событие необработанного исключения CLR.

Windows Form встроенная обработка исключений делает следующее по умолчанию:

  • Выгоды необработанное исключение, когда:
    • исключение находится на основном потоке и никаком присоединенном отладчике.
    • исключение происходит во время обработки сообщения окна.
    • jitDebugging = ложь в Приложении. Конфигурация.
  • Выставочное диалоговое окно пользователю и предотвращает завершение приложения.

можно отключить последнее поведение путем установки jitDebugging = верный в Приложении. Конфигурация. Но помните, что это может быть Вашим последним шансом остановить завершение приложения. Таким образом, следующий шаг, который поймает необработанное исключение, регистрируется для события Application. ThreadException, например:

Application.ThreadException += new
Threading.ThreadExceptionHandler(CatchFormsExceptions);

Примечание установка DbgJitDebugLaunchSetting реестра под HKEY_LOCAL_MACHINE\Software. NetFramework. Это имеет одно из трех значений, о которых я знаю:

  • 0: выставочное пользовательское диалоговое окно выяснение "у отладки или оконечный".
  • 1: пропускает исключение для CLR для контакта с.
  • 2: отладчик запусков определяется в ключе реестра DbgManagedDebugger.

В Visual Studio, перейдите к Инструментам меню в †’ Опции в †’ Отладка в †’ JIT для устанавливания этого ключа к 0 или 2. Но значение 1 является обычно лучшим на машине конечного пользователя. Обратите внимание, что этот ключ реестра действуется на перед событием необработанного исключения CLR.

Это последнее событие является Вашим последним шансом зарегистрировать необработанное исключение. Это инициировано перед Вашим Наконец выполнились блоки. Можно прервать это событие следующим образом:

AppDomain.CurrentDomain.UnhandledException += new
System.UnhandledExceptionEventHandler(CatchClrExceptions);
5
ответ дан Peter Mortensen 28 November 2019 в 07:56
поделиться

Это консольное приложение или приложение Windows Forms? Если это консольное приложение .NET 1.1, это, к сожалению, по своему замыслу - это подтверждается разработчиком MSFT во втором сообщении в блоге, на которое вы ссылались :

Кстати, на моем 1.1 машина пример из MSDN имеет ожидаемый результат; просто вторая строка не появляется, пока вы не подключите отладчик (или нет). В v2 мы перевернули вещи так, что событие UnhandledException срабатывает до того, как подключается отладчик, что, по-видимому, является тем, чего большинство людей ожидают.

Похоже, что .NET 2.0 делает это лучше (слава богу), но, честно говоря, у меня никогда не было времени, чтобы вернуться и проверить.

3
ответ дан Cœur 28 November 2019 в 07:56
поделиться

Это - приложение Windows Forms. Исключения, которые пойманы Приложением. ThreadException хорошо работают, и я не получаю ужасное поле исключения.NET ( хорошо для завершения, Отмена для отладки? кто придумал это??).

я получал некоторые исключения, которые не были пойманы этим и закончили тем, что шли в AppDomain. Событие UnhandledException, которые вызывали проблемы. Я думаю, что поймал большинство тех исключений, и я отображаю их в нашем хорошем ошибочном поле теперь.

, Таким образом, я должен буду просто надеяться, нет некоторых других обстоятельств, которые заставили бы исключения не быть пойманными Приложением. Обработчик ThreadException.

1
ответ дан Peter Mortensen 28 November 2019 в 07:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: