Simple: ShowDialog waits fro the form to close before it continues, Show doesn't.
So if you do this:
MyDialog md = new MyDialog();
md.Text = "Hello there!";
md.ShowDialog();
Console.WriteLine(md.Text);
Nothing will show on the console output until the user closes the form (normally with the OK or Cancel button, but it could be the "X" or CTRL-F4 instead). What will be displayed depends on whether the user changes the value of the Txt property before he closes the form. ShowDialog is a Blocking method.
But if you do this:
MyDialog md = new MyDialog();
md.Text = "Hello there!";
md.Show();
Console.WriteLine(md.Text);
The the text "Hello there!" will be output immediately. You can use both the original form and the new one at the same time. The user can change the Text property all he likes, but it will never again cause the Console.WriteLine to be executed!
ShowDialog is useful when you want to present info to a user, or let him change it, or get info from him before you do anything else.
Show is useful when you want to show information to the user but it is not important that you wait fro him to be finished.