You already have a good answers which can give you good idea on how to solve your problem methodically.
I want to add references to my small articles in CodeProject Tips/Tricks section. Many questions I answered have something in common, so I can reference my articles in the answers.
You can find a robust solution for hourglass cursor here:
Hourglass Mouse Cursor Always Changes Back to its Original Image. How?[
^], please take a look not just at my article but at two alternatives -- they are very good.
Discussion around another question about multi-threading can be useful:
Executing high volume inserts with threads[
^].
See also my Tips/Trick article on inter-thread Invocation and posted samples:
Simple Blocking Queue for Thread Communication and Inter-thread Invocation[
^].
You can can created a separate thread and start if from the very beginning (more exactly, when the application main form is shown). The thread should wait for the user's answer submitted to the message queue. When the answer is supplied, the thread can sleep for a specified period of time and than signal to the main form about time expiration. This condition should be signaled to the UI thread using
Control.Invoke
.
Good luck!
—SA