Подтвердить что ты не робот

Как программно запускать таймер?

Скажем, у меня есть таймер Windows Forms, настроенный с интервалом 10 секунд (10k ms):

myTimer.Interval = 10000;

Я хочу запустить его и немедленно отключить событие Tick:

myTimer.Start();
myTimer_Tick(null, null);

Последняя строка работает, но есть ли лучший или более подходящий способ?

4b9b3361

Ответ 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).