#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 для получения текущего времени выполнения программы в миллисекундах.
Примечание: Вы можете заменить общее количество миллисекунд / истекшие миллисекунды на любой другой показатель времени, который вам нужен.