Как программно запускать таймер?
Скажем, у меня есть таймер Windows Forms, настроенный с интервалом 10 секунд (10k ms):
myTimer.Interval = 10000;
Я хочу запустить его и немедленно отключить событие Tick
:
myTimer.Start();
myTimer_Tick(null, null);
Последняя строка работает, но есть ли лучший или более подходящий способ?
Ответы
Ответ 1
Единственное, что я сделал бы по-другому, это переместить фактическую функциональность Tick в отдельный метод, так что вам не нужно напрямую вызывать это событие.
myTimer.Start();
ProcessTick();
private void MyTimer_Tick(...)
{
ProcessTick();
}
private void ProcessTick()
{
...
}
В первую очередь, я бы сделал это, поскольку прямой вызов событий кажется мне Code Smell - часто он указывает код структуры spagetti.
Ответ 2
В .NET существует как минимум 4 разных "таймера". Используя System.Threading вы можете получить тот, который специально позволяет вам установить начальную задержку.
var Timer = new Timer(Timer_Elapsed, null, 0, 10000);
Есть преимущества использования разных таймеров и здесь - хорошая статья, в которой обсуждается их все.
Ответ 3
Вы можете установить интервал в 1 (0, вероятно, означает бесконечный тайм-аут) и установить его на 10k, когда он будет отмечен в первый раз.
Таймер будет галочкой "очень скоро" (в зависимости от того, какой тип таймера вы используете, см. это), но выполнение не будет продолжаться обработчик кликов, как в вашем решении.
(я полагаю, вы знали о решении от Bevan).