Q:

C# Timer and memory leak

I am creating a program that will check for directory listing every 2 seconds. I expect this program to run for months without leaking memory or requiring any human interaction.

Below program has memory leak. 
I am still not sure what the 10K represents.  It is not the interval.  The interval is 2k.

class Program
{
    static void Main(string[] args)
    {
        Timer aTimer = new Timer(10000);
        aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
        aTimer.Interval = 2000;
        aTimer.Enabled = true;
        Console.WriteLine("Press the Enter key to exit the program.");
        Console.ReadLine();
        GC.KeepAlive(aTimer);
    }

    private static void OnTimedEvent(object source, ElapsedEventArgs e )
    {
        Console.WriteLine("The Elapsed event was raised at {0}", e.SignalTime);

        string[] DirList = Directory.GetFiles(@"C:\TTImer");
        if (DirList.Length > 0)
        {
            foreach (string s in DirList)
            {
                //do something
            }
        }
    }
}

A:

No, there is no memory leak, that is the expected behavior of a program in a langauge that uses a garbage collector.  The memory will increase until eventually it hits a point where the Garbage Collector cleans up any unneeded objects.
It's a place to specify the timer's interval.  You're overwriting it later on, so this is accomplishing nothing.

