У меня была точно такая же проблема, я использовал код Квинтина, и теперь он отлично работает ...
Я внес некоторые изменения для работы с фреймворком 2.0, вот что я сделал:
Сначала я создал делегат, указывая на метод, который открывает форму:
public delegate void pantallazo();
pantallazo obj=new pantallazo(this.ShowFancyForm);
Метод, который открывает форму, тот же, что предоставлен Quintin:
smatiCliente a_fancy_form; //smatiCliente is the name of my new form class...
private void ShowFancyForm()
{
if (null != a_fancy_form) return;
a_fancy_form = new smatiCliente();
this.Hide();
a_fancy_form.Show();
}
И внутри обработчика событий моей программы вы сделали несколько простых изменений:
if(this.InvokeRequired)
{
this.Invoke(obj);
}
ShowFancyForm();
Вот и все, теперь это прекрасно работает. Метод Invoke выполняет соответствующий делегат, поэтому форма теперь создается под основным пользовательским интерфейсом.
Надеюсь, это сработает, и большое спасибо, Квинтин!