2010-12-03 12 views
4

cをトライキャッチでAccessViolation例外の取り扱い:は、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; 
} 

私は血圧値を読み取るために1つのDLLをインポートしています:ここ

は、以下のコードでありますデバイスから。私は例外をキャッチしようとしているが、コントロールはアクセス違反の例外が来ている "if"ステートメントを超えていません。

お勧めですか?

おかげAccessViolationExceptionsの

+1

はあなたのコードを修正し、これらの例外をキャッチいけません。 – leppie

+0

また、外部DLLを使用していると私のコードを修正する方法? – Tarun

答えて

8

取り扱いとcorrupted state exceptionsその他は一般的に、あなたがランタイムが変更されていないキャッチこれらの例外ので、これを反映する必要があり、.NET 4に変更されました。これらをキャッチする必要がある場合は、コードにHandledProcessCorruptedStateExceptions属性の注釈を付ける必要があります。

十分な理由で動作が変更されたことに注意してください。ほとんどのアプリケーションでは、これらの例外を意味のある方法で処理することができないため、これらの例外をキャッチしないでください。

+0

こんにちは、私は属性を入れているが、Errorのようなエラーが出てきた(usingディレクティブまたはアセンブリ参照がないか)。ありがとう – Tarun

+0

@Tarun: 'System.Runtime.ExceptionServices'名前空間をインポートするのを忘れましたか? –

+0

はい、私もそれをインポートしています。同じエラーです。 – Tarun

2

そのHandleProcessCorruptedStateExceptionsないHandleDProcessCorruptedStateExceptions

関連する問題