如何在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”语句。
请建议?
由于
答案 0 :(得分:8)
在.NET 4中已经更改了AccessViolationExceptions和其他corrupted state exceptions的处理。通常,您应该不捕获这些异常,因此运行时已更改以反映这一点。如果您确实需要捕获这些,则必须使用HandledProcessCorruptedStateExceptions
属性注释代码。
请记住,行为是有充分理由改变的。大多数应用程序无法以任何有意义的方式处理这些异常,因此不应该捕获它们。
答案 1 :(得分:2)
其HandleProcessCorruptedStateExceptions不是HandleDProcessCorruptedStateExceptions