通过反射特性读取数据表生成菜单后出现的有关问题

通过反射特性读取数据表生成菜单后出现的问题

//UserNavBarItem.menuEvent为数据表对应的Form名称,通过该字符串转换成对应Form类,产生实例打开。
Assembly assembly = Assembly.LoadFile(Application.StartupPath + "\\myapp.exe");
object newForm = assembly.CreateInstance(UserNavBarItem.menuEvent);
                        if (newForm != null)
                        {
                            newItem.LinkClicked += (sender, e) => PublicService.OpenForm((Form)newForm, this);
                        }


//PublicService中的关于在MDI中的子窗体只打开一次,再次点击自动激活该窗体的事件
public static void OpenForm(Form customerForm,Form MdiForm)
        {
            //1
            for (int i = 0; i < Application.OpenForms.Count; i++)
            {
                if (Application.OpenForms[i].GetType() == customerForm.GetType())
                {
                    Application.OpenForms[i].Activate();
                    return;
                }
            }
            //2
            customerForm.MdiParent = MdiForm;
            customerForm.Show();
        }


程序能够很好执行,但问题出现在关闭打开的MDI中的子窗体,再次点击时报错,原因是OpenForms[i]中显示已经关闭的窗体仍是存在的,于是依旧执行 Application.OpenForms[i].Activate(),又发现该窗体不存在。
请帮忙分析原因,提出解决方案!!
------解决方案--------------------
IsHandleCreated
http://msdn.microsoft.com/zh-cn/library/system.windows.forms.control.ishandlecreated(v=vs.110).aspx