Instead of all the "thread" mumbo-jumbo, just use timer.Close() after timer.Stop()... then when you want to re-use it just timer.Start(). .Dispose() would make that imposible... quick and easy, as it should be... and remember, use Close to Stop... genius!