2013-07-21 3 views
1

Я хочу использовать таймер, который позволяет мне запускать определенный код через определенные промежутки времени, но таймер Winforms очень неточный. Я установил его на 2 секунды, но он погас целых 48 секунд. Тип кода, который я запускаю, сильно зависит от действия как можно скорее, поэтому 48 секунд слишком поздно делать что-либо.Какой самый точный таймер в .NET?

Также я не хочу, чтобы таймер ходил много циклов процессора, потому что код, который я запускаю, очень прост.

+0

Ух, если он погаснет * 46 секунд слишком поздно *, что-то подозревается .. например, неправильно блокирует поток пользовательского интерфейса. Таймеры WinForms отправляются в соответствующий поток пользовательского интерфейса, где он был создан (обычно для каждого «родного» окна). Если вы хотите, чтобы он загорелся * вокруг * блокирующего потока, вам нужно ввести другой поток или использовать таймер, который использует другой поток (который не блокируется). – user2246674

+0

Спасибо, я в основном использую BackgroundWorker, который вызывает метод Monitor. Таймер вызывает RunWorkerAsync. Это плохо? –

+0

BGW.RunWorkerAsync * не должен * блокировать. Есть ли какой-либо код блокировки в обратном вызове таймера, такой как ожидание на BGW? – user2246674

ответ

2

Используйте System.Timer Class. Поскольку он предназначен для многопоточных сред, он более точен, чем таймер.

2

Проверьте также this, а также сравнение MSDN на самом деле глубокое и полное.

Кстати самый точный таймер является Stopwatch, который используется для расчета Code Execution раз и другие аналогичные питания и используется Visual Studio для расчета производительности кодов, так что ясно, насколько точно оно должно быть. Но в вашем случае вы не можете его использовать. Я упомянул StopWatch для вашей информации, а другой, кто мог бы видеть этот пост в будущем.

+1

Спасибо, Да, у секундомера нет события Tick :( –

Смежные вопросы