2010-12-06 7 views
1

J'ai le problème suivant. Je veux attraper l'exception comme montré ci-dessous, à la place je reçois NullReferenceException. Y at-il un moyen d'attraper l'exception jetée à l'intérieur de cette méthode anonyme?Exception de lancement (et de capture) en méthode anonyme

SynchronizationContext _debug_curr_ui = SynchronizationContext.Current; 

_debug_curr_ui.Send(new SendOrPostCallback(delegate(object state) { 
      throw new Exception("RESONANCE CASCADE: GG-3883 hazardous material failure"); 
}),null); 

J'apprécierais n'importe quelle aide.

Répondre

1

Vous pouvez toujours utiliser try/catch dans votre méthode anonyme:

_debug_curr_ui.Send(new SendOrPostCallback(delegate(object state) { 
    try 
    { 
     throw new Exception("RESONANCE CASCADE: GG-3883 hazardous material failure"); 
    } 
    catch (Exception ex) 
    { 
     // TODO: do something useful with the exception 
    } 
}), null); 

Comme alternative, vous pouvez modifier cette méthode Send et intercepter l'exception juste avant d'appeler le délégué:

public void Send(SendOrPostCallback del) 
{ 
    // ... 

    try 
    { 
     del(); 
    } 
    catch (Exception ex) 
    { 
     // TODO: do something useful with the exception 
    } 

    // ... 
} 
+1

Si vous allez jeter, puis immédiatement attraper et manipuler vous pouvez aussi bien ne pas jeter du tout? – TimC

+0

@CrapHands, je suppose que dans le code actuel, il ne lance pas comme ça. Il appelle une méthode qui, dans certaines conditions, jette l'exception. Évidemment, lancer et attraper comme ça n'a pas de sens. –

0

Si je comprends correctement, vous souhaitez que le délégué anonyme lève l'exception et que vous souhaitiez capturer cette exception quelque part en dehors du délégué anonyme.

Pour répondre à cette question, nous aurons besoin de savoir ce que vous faites réellement avec le délégué et comment il est invoqué. Ou, pour être plus précis, que fait la méthode _debug_curr_ui.Send avec le délégué?

0

quelque chose comme ci-dessous

 delegate(object obj) 
     { 
      try 
      { 
      } 
      catch(Exception ex) 
      { 
      } 
     } 
1

Je soupçonne que vous obtenez le NullReferenceException parce _debug_curr_ui est nulle. Sinon, vous devriez être en mesure d'envelopper le code que vous avez posté dans un bloc try/catch et d'attraper l'excpetion. Vous devriez également penser à utiliser ApplicationException et non Exception.

try 
{ 
    Action someMethod = delegate() { throw new ApplicationException("RESONANCE CASCADE: GG-3883 hazardous material failure"); }; 
    someMethod(); 
} 
catch 
{ 
    Console.WriteLine("ex caught"); 
} 

MSDN ApplicationException

Questions connexes