I use this function to close an existing form and open a new form.
If there is no exixting form, it throws an error.
Mistake:
Target: System.Object MarshaledInvoke (System.Windows.Forms.Control, System.Delegate, System.Object [], Boolean)
Message: Invoke or BeginInvoke cannot be called in the control until a window handle is created.
Stack: in System.Windows.Forms.Control.MarshaledInvoke (control call, delegation method, [] args object, boolean synchronous)
SO need to check the open form before closing the form to avoid errors. How?
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);
MyContext.curMain.Invoke(new Action(MyContext.curMain.Dispose));
}
MyContext.curMain = main;
MyContext.curMain.FormClosed += new FormClosedEventHandler(main_FormClosed);
MyContext.curMain.ShowDialog();
}
}
source
share