No. Starting a second message loop on a single thread is not a valid operation. You can use Form.ShowDialog
instead:
Hide();
MainForm newForm = new MainForm(newData);
newForm.Closed += (s, args) => Close();
newForm.ShowDialog();
Or if you'd like to close the old instance:
Hide();
MainForm newForm = new MainForm(newData);
newForm.ShowDialog();
Close();