Получить время, прошедшее с момента запуска приложения

#c#

#c# #.net #wpf #таймер

Вопрос:

Я переношу приложение из ActionScript3.0 (Гибкий) для C # (WPF).В AS3.0 есть удобная утилита под названием getTimer(), которая возвращает время с момента запуска виртуальной машины Flash в миллисекундах.Я искал в C # по классам как

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

но ничего подобного не нашел.Мне это кажется очень простой функцией.Например, Unity3D, который работает на Mono, имеет что-то знакомое. Я пропустил здесь какую-то утилиту?

Заранее спасибо.

Ответ №1:

Process.GetCurrentProcess().StartTime является вашим другом.

..итак, чтобы получить время, прошедшее с момента запуска:

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

в качестве альтернативы, если вам нужно больше определения, System.Diagnostics.Stopwatch может быть предпочтительнее. Если это так, запустите секундомер при запуске вашего приложения:

 Stopwatch sw = Stopwatch.StartNew();
  

затем запросить sw.Elapsed свойство во время выполнения.

Комментарии:

1. Выбор того или иного варианта зависит не от точности, а от потребностей. Process.GetCurrentProcess().StartTime никогда не будет вызываться одновременно с Stopwatch.StartNew() ! Таким образом, это зависит от того, когда пользователь хочет начать синхронизацию. 🙂

2. Вы уверены в процессе. GetCurrentProcess возвращает время с момента запуска приложения? Я только что сделал проверку: (DateTime. Теперь — Процесс. GetCurrentProcess().startTime). Всего секунд. В момент запуска приложения я выводю время на консоль. Оно начинается с 16-17 секунд. Очевидно, что это слишком много, потому что для запуска приложения потребовалось максимум 4 секунды.

3. Интересно. Документы, похоже, согласны со мной. Если это действительно так, я бы сказал, что это заслуживает нового вопроса.

4. @MichaelIV — большой промежуток времени довольно легко воспроизвести. Нажмите F5. Чтобы получить минимально необходимое количество времени, используйте CTRL F5 (Запуск без отладки). F5 (запуск с помощью отладчика) выполняется внутри AssemblyName.vshost.exe которое, возможно, выполнялось дольше, чем при первом «запуске» сеанса отладки. Попробуйте использовать Process. Получить currentprocess().ProcessName в начальной версии программы.

5. Процесс. GetCurrentProcess().startTime у меня не работает. Кстати, я не на Unity. Секундомер сработал для меня.

Ответ №2:

 public static class Runtime
{
    static Runtime() 
    {
        var ThisProcess = System.Diagnostics.Process.GetCurrentProcess(); LastSystemTime = (long)(System.DateTime.Now - ThisProcess.StartTime).TotalMilliseconds; ThisProcess.Dispose();
        StopWatch = new System.Diagnostics.Stopwatch(); StopWatch.Start();
    }
    private static long LastSystemTime;
    private static System.Diagnostics.Stopwatch StopWatch;

    //Public.
    public static long CurrentRuntime { get { return StopWatch.ElapsedMilliseconds   LastSystemTime; } }
}
  

Затем вызовите: Runtime.CurrentRuntime для получения текущего времени выполнения программы в миллисекундах.

Примечание: Вы можете заменить общее количество миллисекунд / истекшие миллисекунды на любой другой показатель времени, который вам нужен.