Обработка исключения AccessViolation в try catch c # - PullRequest
4 голосов
/ 03 декабря 2010

Как перехватить исключение AccessViolation в блоке try-catch:

вот код ниже:

public static BP GetBloodPressure(string vendorid, string productid)
{
    BP Result = new BP();
    try
    {
        GETBPData BPreadings = new GETBPData();
        UInt16 VendorId = Convert.ToUInt16(vendorid, 16);
        UInt16 ProductId = Convert.ToUInt16(productid, 16);

        if (HealthMonitorData.HidDataTap_GetBloodPressure(VendorId, ProductId, ref BPreadings)) // error here
        {

            if (BPreadings.ucSystolic == 0 && BPreadings.ucDiastolic == 0 && BPreadings.DeviceId1 == 0 && BPreadings.DeviceId2 == 0 && BPreadings.ucPulse == 0)
            {
                Result = null;

            }
            else
            {
                Result.UcSystolic = BPreadings.ucSystolic;
                Result.UcDiastolic = BPreadings.ucDiastolic;
                Result.UcPulse = BPreadings.ucPulse;
                Result.DeviceId1 = BPreadings.DeviceId1;
                Result.DeviceId2 = BPreadings.DeviceId2;
            }
        }
    }
    catch (Exception ex)
    {

    }
        return Result;
}

Я импортирую одну DLL для чтения значений артериального давления с устройства,Я пытаюсь поймать исключение, но элемент управления не выходит за пределы оператора "if", в котором появляется исключение о нарушении прав доступа.

Пожалуйста, предложите?

Спасибо

Ответы [ 2 ]

8 голосов
/ 03 декабря 2010

Обработка AccessViolationExceptions и других исключений из-за поврежденного состояния была изменена в .NET 4. Как правило, не перехватывает эти исключения, поэтому время выполнения было изменено, чтобы отразить это. Если вам действительно нужно их перехватить, вы должны аннотировать код атрибутом HandledProcessCorruptedStateExceptions.

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

2 голосов
/ 09 января 2011

его HandleProcessCorruptedStateExceptions, а не HandleDProcessCorruptedStateExceptions

...