Randloph,
first of all, you can show a form and start a new thread there. If the
worker thread has been started by the new form, it doesn't freeze. But
that's not creating a new UI-Thread, as I pointed out.
A good example for a new UI-Thread could be something like the output window
of the VS-Environment. If you want to implement such a thing in your
application (as a status window, e.g.), you might want to have a second
UI-Thread. One advantage is that you don't need to take care of using Invoke
of a control to change its property thread-safely.
Another thing is, that you could for example create a new WriteLine-Method
that "outputs" text into a form running in a 2. UI-Thread without ever
taking care of synchronisation issues of the "other side" (that is, all the
other threads, that might be running and using this function). The
synchronisation of the output would be totally done in the form that runs on
the second UI-Thread, and that brings comfort and more overview with the
actual programming, because it's totaly excapsulated. Since it's running in
a different thread, it can never freeze in addition (when the main UI-Thread
blocks itself due to an extensive operation).
Think of the following scenario. The first time you use
MyThreadSafeOutput.WriteLine("xxxxx")
from any running thread, a windows opens and prints the text. No connection
to your first UI-Thread is needed, no instancing has to be done. If your
main application closes, the output windows closes, too. For that you would
need a second ui-thread. I developed such a thing for a book I currently
write for Microsoft Press Germany. Since I have to meet a deadline, I have
no time at the moment to translate the comments; but if you still
interested, I'll translate it for you sometime next month. Just send me a
reminder at (e-mail address removed) (spell the last name with OE not Ö!).
Klaus