 <ul> <li><p>you don't need to create a thread just to start timer in it. You can just start timer in your main thread. Its function will run on a thread from threadpool.</p></li> <li><p>I don't see why you need to create a thread for <code>start()</code> function. It needs to be run at least partially <em>before</em> your timer first work. So, you may execute <code>RegKeys = load.read(RegKeys);</code> (and probably other code from <code>start</code>) in main thread. if you insist on running it in separate thread, ensure that <code>RegKeys</code> is initialized. It can be done by, e.g. setting <code>ManualResetEvent</code> after initializing <code>RegKeys</code> and waiting for this <code>ManualResetEvent</code> in timer callback.</p></li> <li><p>You should stop timer on process exit.</p></li> <li><p>you need to wait for started thread's stopping using <code>Thread.Join</code> method or by waiting on some <code>WaitHandle</code> (<code>ManualResetEvent</code> e.g.) being set in thread on finish.</p></li> </ul>