Tick работает только с точностью 55 миллисекунд (если не ошибаюсь

)
Ниже, класс — что-то вроде таймера с точностью до одной милисекунды (не знаю уж насколько точно, но близко к этому)
internal class PreTime
{
private PreTime() {}
#region PInvoke
[DllImport("winmm.dll")]
private static extern int timeGetTime();
[DllImport("winmm.dll")]
private static extern int timeBeginPeriod(int milliseconds);
[DllImport("winmm.dll")]
private static extern int timeEndPeriod(int milliseconds);
#endregion
#region Operations
private static bool _isStarted;
private static object startSynhRoot = new object();
internal static bool isStarted
{
get
{
lock(startSynhRoot)
{
return _isStarted;
}
}
}
internal static void Start()
{
lock(startSynhRoot)
{
timeBeginPeriod(1);
_isStarted = true;
}
}
internal static void Stop()
{
lock(startSynhRoot)
{
timeEndPeriod(1);
_isStarted = false;
}
}
#endregion
internal static double CurrentTime
{
get
{
return (double)timeGetTime() / 1000d;
}
}
}