I just want a c# application with a hidden main window that will process and respond to window messages.
I can create a form without showing it, and can then call Ap
Why can't you just pass the form when you call Application.Run? Given that it's clearly a blocking call, on what event do you want to show the form? Just calling form.Show() should be enough.
Application.Run
form.Show()