Я использую эту функцию, чтобы закрыть существующую форму и открыть новую форму.
Если не существует формы для приписывания, выдается ошибка.
Ошибка:
Цель: System.Object MarshaledInvoke (System.Windows.Forms.Control, System.Delegate, System.Object [], Boolean)
Сообщение: Invoke или BeginInvoke не могут быть вызваны для элемента управления, пока не будет создан дескриптор окна.
Стек: в System.Windows.Forms.Control.MarshaledInvoke (вызывающий элемент управления, метод Delegate, аргументы Object [], логическое синхронное значение)
ТАК нужно проверять открытость формы перед закрытием формы, чтобы избежать ошибки. Как?
static public void NewMainForm(Form main, bool ClosePreviousMain)
{
if (main != null)
{
Global.ActiveForm = main.Text;
if (ClosePreviousMain & MyContext.curMain != null)
{
MyContext.curMain.FormClosed -= new FormClosedEventHandler(main_FormClosed);
//Need to check for any form active and then close the form.
MyContext.curMain.Invoke(new Action(MyContext.curMain.Dispose));
}
MyContext.curMain = main;
MyContext.curMain.FormClosed += new FormClosedEventHandler(main_FormClosed);
MyContext.curMain.ShowDialog();
}
}