首页 > 代码库 > 使用反射来管理子程序的主窗体

使用反射来管理子程序的主窗体

 目标:在主程序运行时打开子程序,并在主程序中根据一些逻辑来适时地隐藏和显示子程序的主窗体。

 

  最初的想法是使用启动进程的方式,但是这样要用到Win32的一些个API,还要找窗体什么的,另外操作进程占用资源也会多,所以主动放弃这个想法。于是想到使用反射来完成这个过程。

        string path;//程序集路径        object myo;        string typeForm;//窗体类型,是Form1或者Form2        public ChildMsg(string pathAss, string typeForm)        {            this.path = pathAss;            this.typeForm = typeForm;        }        //初始化        private bool InitIt()        {            try            {                if (myo == null)                {                    Assembly mainAss = Assembly.LoadFrom(path);                    myo = mainAss.CreateInstance(typeForm);                    return true;                }            }            catch            {                return false;            }            return false;        }        //打开方法        public void OpenIt()        {            if (InitIt())            {                MethodInfo mi = myo.GetType().GetMethod("Show", new Type[] { });                mi.Invoke(myo, null);            }        }        //显示与隐藏        public void Show(bool yes)        {            PropertyInfo pi = myo.GetType().GetProperty("Visible");            pi.SetValue(myo, yes, null);        }        //关闭        public void CloseIt()        {            MethodInfo mi = myo.GetType().GetMethod("Close", new Type[] { });            mi.Invoke(myo, null);        }

  感觉没有什么新鲜的,算是对反射的一个使用示例。这个类封装的不太好,希望多提宝贵意见。

 

 

使用反射来管理子程序的主窗体