You should interact with the UI only from the main thread, what you can do
is create a delegate and fire an event to be executed on the UI thread,
there you can open a new window with no problem.
You can inherit from EventArgs to add the object you need to pass to the
event.
You can use Form.ShowDialog as usual on any thread. But you might have to
ensure dialog will be shown not behind some other window, which might happen
to be active at that moment.
If you want to show standard form, you might do this with Application.Run on
it. It will work Ok if there is no interaction with forms on other threads,
including UI. Otherwise, you'll have to resort to Invoke methods and
InvokeRequired checks.