在try catch c#中处理AccessViolation异常

时间:2010-12-03 05:15:17

标签: wpf mvvm c#-4.0 try-catch

如何在try-catch块中捕获AccessViolation异常:

这是下面的代码:

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 个答案:

答案 0 :(得分:8)

在.NET 4中已经更改了AccessViolationExceptions和其他corrupted state exceptions的处理。通常,您应该捕获这些异常,因此运行时已更改以反映这一点。如果您确实需要捕获这些,则必须使用HandledProcessCorruptedStateExceptions属性注释代码。

请记住,行为是有充分理由改变的。大多数应用程序无法以任何有意义的方式处理这些异常,因此不应该捕获它们。

答案 1 :(得分:2)

其HandleProcessCorruptedStateExceptions不是HandleDProcessCorruptedStateExceptions