大约一年前吧,在某个技术交流群里出现了这么一个问题,大致上问的是Form在ShowDialog并调用了Close方法并没有及时释放,紧跟其后的语句仍然能读到这个Form的相关属性,也就是说程序并没有立即释放它,测试代码形如:
Form2 frm2 = new Form2();
if (frm2.ShowDialog() == DialogResult.OK)
MessageBox.Show("Yes");
else
MessageBox.Show("No");
frm2.Close();
string strTest = frm2.strTest;
其中frm2里调用按钮的事件处理中调用了this.Close和this.DialogResult=DialogResult.OK。
当时工作仅一年,.Net本质论也还看的懵懵懂懂的,对Form的机制并不理解,当时根据对GC的理解,猜测是上下文的引用关系导致了GC没有及时释放它,今天,刚刚在群里又有人问了相似的问题,闲暇之余(好吧,我承认是工作时间偷懒了~)用Relector看了Form的相关方法,尝试理解了下它的机制,发现并不是当初想的那么回事儿,整个Form的机制也不像我们从表面上看的那么简单,它事实上采用了一种消息的机制来实现的,因为工作时间的关系