While you are somewhat right in that using Form.Show on a separate thread doesn't generally work, it's not for the reasons you're thinking.
When you do a new thread such as in:
Thread t = new Thread(OpenNewForm);
t.Start();
whenever that method completes (in this case OpenNewForm), the thread will "go away" killing anything within it. Because you're using .Show(), the method will complete.
If however, you used
.ShowDialog()
, the thread will not finish until that thread is closed.
And, even though I know this works, I just tested it like so:
private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(OpenNewForm);
t.Start();
}
private void OpenNewForm()
{
Form1 newForm = new Form1();
newForm.ShowDialog();
}
Doing this works...you can even close the main form and the application won't close until newForm is closed and the thread has been allowed to complete.