|There are four timers in .NET. |
System.Windows.Forms.Timer - This works though the message pump. It only works on a GUI thread, and it only fires when you're pumping messages. In a single threaded application, this means it'll only fire if your application is idle. The Win32 method it wraps dates back to Win16, so it lacks alternate threads. As it isn't concurrent, you shouldn't run into any concurrency issues.
System.Timers.Timer - Runs from the ThreadPool, and does its work from there. It has thread safety baked in, so if you're careful you shouldn't have too many concurrency issues.
System.Threading.Timer - The underpinnings of Timers.Timer, but without thread safety. You don't want it.
System.Windows.Threading.DispatcherTimer - WPF, so you don't want it and can't use it.
I'm not sure if you have a Forms.Timer, or a Timers.Timer, but I suspect it's the Forms version. What I would probably do in your position is to use a Forms timer for your button flashing. For the actual work, I'd throw a System.ComponentModel.BackgroundWorker at it.
How To Ask Questions The Smart Way