Prima di tutto una piccola parentesi OT: venerdì sarò al Whidbey Day quindi se volete insultarmi presentatevi pure davanti a me :-D
Ho avuto la necessità di poter sapere il chiamante e quindi lo stack di chiamate ad un metodo. Questo perché necessitavo del tipo della quale il chiamante è membro per poter caricare il relativo file di risorse.
Ho pensato quindi alle eccezioni che sanno indicare tutto lo stack, nome file e linea di codice (se in debug). Ho guardato quindi la classe Exception col mitico Reflector. La classe fa uso del tipo System.Diagnostics.StackTrace che è in grado di prelevare tutti gli StackFrame e di recuperare tutte quelle normali informazioni che dà l'eccezione relative al thread passatogli o all'attuale thread o all'eccezione passata.
Per esempio questo codice serve per sapere il chiamante:
StackTrace stack = new StackTrace(1);
StackFrame frame = stack.GetFrame(0);
Response.Write(frame.GetMethod());
L'intero passato al costruttore indica quanti frame skippare, in questo caso 1 perché il primo frame sarebbe l'attuale metodo. Ovviamente se mettiamo 0, a GetFrame va passato 1. GetMethod restituisce un MethodBase quindi possiamo conoscere la firma, il tipo, ed eventualmente invocare il metodo.
Magari ne eravate già a conoscienza; io non lo sapevo...
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- LINQ, lazy loading e architettura, l'11 marzo 2011 alle 18:42
- MetadataDiffViewer: aggiornato al .NET Framework 4.0, Silverlight 4.0 e Sharepoint 2010, il 7 gennaio 2010 alle 13:58
- .NET Framework 4.0 beta 1: Windows Communication Foundation, il 18 maggio 2009 alle 16:00
- Parallelizzare in Silverlight 2.0, il 21 aprile 2009 alle 00:25
- Silverlight: performance dell'isolated storage, il 16 aprile 2009 alle 17:38
- MetadataDiffViewer: differenze tra i framework, il 15 aprile 2009 alle 18:56