The horror: blocking and delaying in C#

Today I had the task of creating a C# function that does two things. First, it blocks the main thread. Second, it executes on a delay. I'm not even going to begin to explain why this was the requirement, but it was. While this could be done (easily and poorly) with a Thread.Sleep call, I decided to wrap it in an extension method so it could be reused. I mean, the demand for this kind of call has to be out the roof.

So without further adieu, here's the static method that takes two arguments. The first argument is the method you want to invoke wrapped in an Action. The second argument is the delay in seconds.

public static void Delay(Action methodToCall, double timeDelayInSeconds)
{
    System.Timers.Timer timer = new System.Timers.Timer();
    timer.Elapsed += (sender, args) =>
    {
        methodToCall.Invoke();
        timer.Stop();
    };
    timer.Interval = timeDelayInSeconds;
    timer.Start();
}