Этот вопрос старый и существующие ответы хорошо охватывают проблему, как это было в то время. Тем временем произошло что-то новое.
Таймер, конечно, для чего?
Использование таймера - это способ запустить некоторую обработку с некоторой задержкой и / или с регулярным интервалом. Есть два случая:
(1) это просто чтобы периодически запускать какой-то короткий код без каких-либо проблем с потоками, без проблем, без проблем. Если простой таймер Windows Forms не подходит, то System.Timers.Timer
с его свойством SynchronizingObject
делает его более простым, чем System.Threading.Timer
.
(2) то, что вы кодируете, находится в области асинхронной параллельной обработки. Это традиционно было подвержено ошибкам, трудно отладить, получить правильную информацию, независимо от того, что использовал простой таймер.
В случае 2 вы можете избежать традиционного подхода, но будьте осторожны, сложность скрывается и готова съесть вас не один раз, а в любое время, когда вы просто не сделаете лучший выбор с совокупными эффектами.
Теперь у нас есть что-то лучше
Если ваша ситуация связана с какой-то обработкой «события» (независимо от того, как она кодируется: нажатия клавиш, кнопки мыши, байты от последовательного порта, от сетевого подключения, от измерений и т. Д.), Вам следует рассмотреть возможность реактивного программирования.
Реактивное программирование в последние годы каким-то образом раскрыло, как кодировать эти ситуации, не попадая в ловушки сложности.
Итак, технически следующая ссылка является ответом на вопрос: это таймер, который находится в пространстве имен System.Reactive.Linq
: Observable.Timer Method (System.Reactive.Linq)
Если честно, это таймер, который подходит и хорошо сочетается с мышлением Reactive Programming и множеством изменяющих игру вещей. Тем не менее, это может или не может быть лучшим инструментом, в зависимости от контекста.
Поскольку этот вопрос ориентирован на .NET, вас может заинтересовать Хорошее введение в .NET Reactive Framework
Или для ясного, иллюстрированного, более общего (не ориентированного на Microsoft) документа это кажется хорошим Введение в реактивное программирование, которое вы пропустили .