Je dois redéclencher une exception qui a été interceptée et stockée ailleurs sans perdre les informations de trace de la pile sur le moment où l'exception a été capturée/stockée. Mon code ressemble à ceci:Préservation de la trace de la pile lors de la réitération des exceptions dans Silverlight
public void Test()
{
int someParameter = 12;
ExecuteSomeAsyncMethod(someParameter, CallbackMethod);
}
public void CallbackMethod(object result, Exception error)
{
//Check for exceptions that were previously caught and passed to us
if(error != null)
//Throwing like this will lose the stack trace already in Exception
//We'd like to be able to rethrow it without overwriting the stack trace
throw error;
//Success case: Process 'result'...etc...
}
J'ai vu des solutions à ce problème qui utilisent la réflexion (par exemple here et here) ou utiliser sérialisation (par exemple here), mais aucun de ceux ne fonctionnera pour moi dans Silverlight (la réflexion privée n'est pas autorisée et les classes/méthodes utilisées dans l'approche de sérialisation n'existent pas dans Silverlight).
Est-il possible de préserver la trace de pile qui fonctionne dans Silverlight?
Cela ressemble à ma seule option pour le moment. Malheureusement, cela pourrait/va interférer avec le code existant comme "catch (SpecificExceptionClass)" ou qui autrement vérifie le type de l'exception sur la route. Idéalement, j'aimerais éviter d'exclure l'exception si cela est possible parce que je ne veux pas que les consommateurs commencent à vérifier InnerExceptions pour l'exception «réelle». –