Ссылка NullReferenceException или Object, не установленная на экземпляр объекта, возникает, когда объект класса, который вы пытаетесь использовать, не создается. Например:
Предположим, что у вас есть класс с именем Student.
public class Student
{
private string FirstName;
private string LastName;
public string GetFullName()
{
return FirstName + LastName;
}
}
Теперь рассмотрим другой класс, в котором вы пытаетесь получить полное имя учащегося.
public class StudentInfo
{
public string GetStudentName()
{
Student s;
string fullname = s.GetFullName();
return fullname;
}
}
Как видно из вышеприведенного кода, оператор Student s - объявляет только переменную типа Student, обратите внимание, что класс Student не создается в этой точке. Следовательно, когда выполняется выполнение инструкции s.GetFullName (), она выкинет исключение NullReferenceException.
В .NET 4.0 среда выполнения обрабатывает определенные исключения, вызванные ошибками обработки структурированных ошибок Windows (SEH) в качестве индикаторов Corrupted State. Эти Исключенные Исключения Исключения (CSE) не могут быть уловлены вашим стандартным управляемым кодом. Я не буду вдаваться в то, почему и как здесь. Прочтите эту статью о CSE в .NET 4.0 Framework:
http://msdn.microsoft.com/en-us/magazine/dd419661.aspx#id0070035
Но есть надежда. Есть несколько способов обойти это:
<legacyCorruptedStateExceptionsPolicy enabled="true|false"/>
HandleProcessCorruptedStateExceptions
. Подробнее см. В http://msdn.microsoft.com/en-us/magazine/dd419661.aspx#id0070035 . EDIT
Ранее я упомянул сообщение forum для получения дополнительной информации. Но так как Microsoft Connect был удален, вот дополнительные сведения, если вам интересно:
От Gaurav Khanna, разработчика из команды CLR Microsoft
Это поведение по дизайну из-за особенностей CLR 4.0, называемых «Corrupted State Exceptions». Проще говоря, управляемый код не должен пытаться поймать исключения, указывающие на поврежденное состояние процесса, и AV является одним из них.
Затем он продолжает ссылаться на документацию на HandleProcessCorruptedStateExceptionsAttribute и вышеприведенной статье. Достаточно сказать, что это определенно стоит прочитать, если вы планируете использовать эти типы исключений.
Скомпилированный из приведенных выше ответов, сработал для меня, сделал следующие шаги, чтобы поймать его.
Шаг # 1 - Добавить следующий фрагмент в файл конфигурации
<configuration>
<runtime>
<legacyCorruptedStateExceptionsPolicy enabled="true" />
</runtime>
</configuration>
Шаг # 2
Добавить -
[HandleProcessCorruptedStateExceptions]
[SecurityCritical]
в верхней части функции, которую вы связываете, поймать исключение
source: http://www.gisremotesensing.com /2017/03/catch-exception-attempted-to-read-or.html
Добавьте в конфигурационный файл следующее: оно будет поймано в блоке try catch. Слово осторожности ... старайтесь избегать этой ситуации, так как это означает, что происходит какое-то нарушение.
<configuration>
<runtime>
<legacyCorruptedStateExceptionsPolicy enabled="true" />
</runtime>
</configuration>
Вы можете попробовать использовать AppDomain.UnhandledException и посмотреть, позволяет ли это его поймать.
** EDIT *
Вот несколько более подробная информация , которая может быть полезна (долго читается).
HandleProcessCorruptedStateExceptions
работает для меня в .Net 4.5. – deerchao 26 May 2013 в 09:56OR
» & quot; способов сделать это. :) – Lou 10 October 2016 в 09:58