标签:
目标:在主程序运行时打开子程序,并在主程序中根据一些逻辑来适时地隐藏和显示子程序的主窗体。
最初的想法是使用启动进程的方式,但是这样要用到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); }
感觉没有什么新鲜的,算是对反射的一个使用示例。这个类封装的不太好,希望多提宝贵意见。
标签:
原文地址:http://www.cnblogs.com/ddx-deng/p/4262214.html