2010-12-03 21 views
4

Comment attraper l'exception AccessViolation dans le bloc try-catch:Manipulation exception AccessViolation des prises try C#

est ici le code ci-dessous:

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; 
} 

J'importe une dll pour lire les valeurs de pression artérielle de l'appareil. J'ai essayé d'attraper l'exception mais le contrôle ne va pas au-delà de l'instruction "if" où l'exception de violation d'accès arrive.

Veuillez suggérer?

Merci

+1

corriger votre code, ne pas attraper ces exceptions. – leppie

+0

aussi, Comment réparer mon code en utilisant la DLL externe.? – Tarun

Répondre

8

Manipulation de AccessViolationExceptions et d'autres corrupted state exceptions a été modifié dans .NET 4. En général, vous devez pas prises ces exceptions, de sorte que le temps d'exécution a été modifié pour tenir compte. Si vous avez vraiment besoin de les prendre, vous devez annoter le code avec l'attribut HandledProcessCorruptedStateExceptions.

Veuillez garder à l'esprit que le comportement a été modifié avec raison. La plupart des applications ne seront pas capables de gérer ces exceptions de manière significative et ne devraient donc pas les attraper.

+0

Salut, j'ai mis l'attribut mais obtenir une erreur comme Erreur (il vous manque une directive using ou une référence d'assembly). Merci – Tarun

+0

@Tarun: Vous souvenez-vous d'importer l'espace de noms 'System.Runtime.ExceptionServices'? –

+0

Oui, je l'ai aussi importé. mais même erreur. – Tarun

2

ses HandleProcessCorruptedStateExceptions pas HandleDProcessCorruptedStateExceptions