Если вы делаете это только для одного элемента управления, подход по таймеру будет работать нормально. Более надежный подход с поддержкой нескольких элементов управления и типов событий выглядит примерно так:
class Event
{
public DateTime StartTime { get; set; }
public Action Method { get; set; }
public Event(Action method)
{
Method = method;
StartTime = DateTime.Now + TimeSpan.FromSeconds(1);
}
}
Сохраняйте Queue<Event>
в вашей форме, и события пользовательского интерфейса, которые необходимо отложить, добавляют их в очередь, например ::
void onButtonClick( ..)
{
EventQueue.Enqueue(new Event(MethodToCall));
}
Сделайте ваш таймер 10 раз в секунду или около того, и обработчик события Tick будет выглядеть так:
void onTimerTick()
{
if (EventQueue.Any() && EventQueue.First().StartTime >= DateTime.Now)
{
Event e = EventQueue.Dequeue();
e.Method;
}
}