很长时间没有整理做过的东西了,今天由于另一个问题,用到了以前program中的一点东西,一点儿印象也没有
感觉再不总结下,以后还是会忘,所以今儿总结下:
问题一:调用dll后出现的问题,
public void ReWork(string jimi)
{
try
{
FormCollection ftd = Application.OpenForms;
IEnumerator id = ftd.GetEnumerator();
while (id.MoveNext())
{
string a = id.Current.ToString().Substring(0, id.Current.ToString().IndexOf('.'));
if (a == GetType().Namespace)
{
((Form)id.Current).Close();
((Form)id.Current).Dispose();
id = ftd.GetEnumerator();
}
if (ftd.Count == 1)
break;
}
this.StartDll(jimi);
this.ReSetPoint();
}
catch (Exception ee)
{
MessageBox.Show(ee.Message);
}
}
本身对FormCollection和IEnumerator不是很熟悉,FormCollection本身是一个集合,从Application中我们得到当前获取打开的所有窗体。
然后通过FormCollection对象的GetEnumeration方法,得到FormCollection实例的枚举数。
已知这里id一定不为空,然后通过迭代执行while循环,在循环体内,判断一下当前项目的命名空间,现在运行的项目和调用的Dll项目名称当然是不同的,不同的话再判断下当前项目的窗体数目,由于已知本项目中只有一个窗体,所以会跳出循环,接着再次会实例化窗体。