Mike,
>Is there a way I can make it work so I can still run events?
It sounds like what you're actually wanting to do is run this loop (or long process) on it's own thread. The .NET framework has a native multi-threading set of classes to use (see System.Threading namespace documentation). This would run your loop independently of your main thread, and allow it to report back to your main thread when it finishes processing (or update status information etc....). Your main thread could continue running while this process runs "in the background".
Implementing multi-threading is a fairly complex subject. If this is something you are interested in doing, I would reccomend reading some articles and/or books on this, and then attempt an implementation. Additionally, there are some videos on threading at
www.learnvisualstudio.net that will take you through the process of writing and implementing threads.
Also, there is a non-visual timers class in the .NET framework if you're wanting to implement timers without the need for a form (see the System.Timers namespace documentation).
regards,
JE