【发布时间】:2016-07-26 15:07:58
【问题描述】:
目前我有一个程序来显示一些项目信息。我有一个com box 来练习不同的类别,以及一个面板来显示com box 中每个选择的项目。
我创建了自己的自定义控件来显示,但是当我将它动态添加到面板时,它会导致 Win32 Exception 即 Create Window handle Error。
经过多次测试,我注意到一旦面板总共列出了 1800 个自定义控件,就会出现异常。有没有人可以解决这个问题?谢谢。
private void DisplayItems(List<ITEM_DATA> ItemList)
{
DisposeControls();
int total = ItemList.Count;
ItemDisplayer itemDisplayer = null;
Application.DoEvents();
for (int i = 0; i < total / 4 + 1; i++)
{
for (int j = 0; j < 4; j++)
{
int m = (i * 4) + j;
if (m >= total)
{
return;
}
itemDisplayer = new ItemDisplayer(ItemList[m], ref labItemName);
itemDisplayer.Size = new Size(240, 80);
itemDisplayer.Location = new Point(240 * j, 80 * i);
itemDisplayer.Name = "itemDisplayer" + Convert.ToString(m);
pnlItems.Controls.Add(itemDisplayer);
}
}
}
【问题讨论】:
-
您使用的所有程序可以创建的窗口总数的硬性上限为 65535。Windows 确保程序不会占用其不公平的份额通过将其总数限制为 10000。当您超过该限制时,您将获得此异常。也许您正在泄漏控件,请使用任务管理器并添加 USER Objects 列,以便查看总数。但是你需要编写更智能的代码的几率很高,1800 已经很不合理了。
-
是的,我听从了你的建议。问题是用户对象达到 10000。知道如何解决吗?谢谢
标签: c# win32exception