Сохранение трассировки стека при отбрасывании исключений в Silverlight - PullRequest
5 голосов
/ 30 ноября 2010

Мне нужно перебросить исключение, которое было перехвачено и сохранено в другом месте без потери информации трассировки стека о том, когда исключение было впервые перехвачено / сохранено.Мой код выглядит примерно так:

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

Я видел решения этой проблемы, которые используют отражение (например, здесь и здесь ) или используют сериализацию (например здесь ), но ни один из них не будет работать для меня в Silverlight (личное отражение не допускается, а классы / методы, используемые в методе сериализации, не существуют в Silverlight).

Есть ли способ сохранить трассировку стека, которая работает в Silverlight?

Ответы [ 2 ]

3 голосов
/ 30 ноября 2010

Вы можете использовать

catch(Exeption)
{
   throw;
}

или

catch(Exception e)
{
   throw new Exception(e);
}

Оба сохранят трассировку стека.Первое решение кажется невозможным в вашем примере, но второе должно работать.

Конечно, в вашем случае вы бы выбросили параметр error вместо e.

3 голосов
/ 30 ноября 2010

Создайте новое исключение с исключением как внутреннее исключение:

throw new ApplcationException("Error message", error);

Внутреннее исключение сохранит трассировку стека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...