一、Bug:
1、工位调试界面切换工位时提示创建窗口句柄时出错(VS调试),或程序直接退出(非VS调试).
2、一般循环切换工位N次会出现,次数具体看工位使用控件的数量决定。
二、原因:
每一次切换工位都会清除之前控件,但使用的是Controls.Clear()清除控件,并没有释放控件。
如果Button、GroupBox、Combobox、TextBox等或其他第三方UI控件未正常释放,超过系统默认数量限制(10000个)从而导致无法在创建控件。
如下图:
三、解决办法:
只需释放父控件,无需递归到每一个控件都去释放一次。因为GC会回收父控件为空的控件。
现在代码:
panel.Controls.Clear();
修正后的代码:
/// <summary>
/// 释放控件
/// </summary>
/// <param name="control">父控件 例如panel</param>
/// <returns></returns>
public void DisposeControl(Control control){
while (control.Controls.Count > 0)
{
Control cl = control.Controls[0];
cl.Dispose();
control.Controls.Remove(cl);
}
control.Controls.Clear();
}
ATT项目修改截图: