2012-04-15 12 views
8

Sto effettuando il porting di un'app da ActionScript3.0 (Flex) a C# (WPF). AS3.0 ha un'utilità pratica chiamata getTimer() che restituisce il tempo dall'avvio della macchina virtuale Flash in millisecondi. la ricerca in C# tramite classiTempo trascorso dall'avvio dell'applicazione

DateTime 
DispatcherTimer 
System.Diagnostics.Process 
System.Diagnostics.Stopwatch 

ma trovato nulla come this.It sembra una caratteristica molto di base per me.For esempio Unity3D che gira su Mono ha qualcosa di familiare. Mi manca qualche utilità qui?

Grazie in anticipo.

risposta

26

Process.GetCurrentProcess().StartTime è tuo amico.

..quindi per ottenere tempo trascorso dall'inizio:

DateTime.UtcNow - Process.GetCurrentProcess().StartTime.ToUniversalTime() 

In alternativa, se avete bisogno di una maggiore definizione, System.Diagnostics.Stopwatch potrebbe essere preferibile. In tal caso, avviare un cronometro quando la vostra applicazione si avvia:

Stopwatch sw=Stopwatch.StartNew(); 

quindi interrogare la proprietà sw.Elapsed durante la corsa di esecuzione.

+0

Se scegliere l'uno o l'altro non è una questione di precisione ma di necessità. 'Process.GetCurrentProcess(). StartTime' non verrà mai chiamato allo stesso tempo di' Stopwatch.StartNew() '! Quindi dipende da quando l'utente vuole iniziare il cronometraggio. :) –

+0

Sei sicuro che Process.GetCurrentProcess restituisce il tempo dall'avvio dell'applicazione? Ho appena fatto un controllo: (DateTime.Now -Process.GetCurrentProcess(). StartTime) .TotalSeconds. Nel momento in cui l'App è attiva stampo il tempo su Console.Esso inizia tra 16-17 secondi. Ovviamente è troppo perché sono stati necessari al massimo 4 secondi per l'avvio dell'app. –

+0

Interessante. I documenti sembrano essere d'accordo con me. Se questo è davvero il caso, direi che merita una nuova domanda. – spender

Problemi correlati