C# 在加载窗口之前创建窗口句柄时出错
我有一个带有很多控件的大型windows窗体程序。我运行它时看到的第一个窗口是登录屏幕,它只有一个组合框、按钮、文本框和一些标签。当我按下按钮时,它加载Form1。Form1,on load自动创建一个游戏实例,它使用以下代码最小化并将游戏嵌入Form1:C# 在加载窗口之前创建窗口句柄时出错,c#,winforms,C#,Winforms,我有一个带有很多控件的大型windows窗体程序。我运行它时看到的第一个窗口是登录屏幕,它只有一个组合框、按钮、文本框和一些标签。当我按下按钮时,它加载Form1。Form1,on load自动创建一个游戏实例,它使用以下代码最小化并将游戏嵌入Form1: Game.Location = new Point(146, 6); Game.TopLevel = false; Game.Visible = true; Game.BringToFront(); Game.FormBorderStyle
Game.Location = new Point(146, 6);
Game.TopLevel = false;
Game.Visible = true;
Game.BringToFront();
Game.FormBorderStyle = FormBorderStyle.None;
Controls.Add(Game);
我明白了
“创建窗口句柄时出错”
此行出错(由于某些原因,它不在窗口创建行):
请帮助,其他人说这是因为有太多的窗口,但我尝试在project中删除窗口,但我得到了相同的错误。这个问题似乎已经得到了回答: 您收到错误是因为您的程序创建了太多错误 把手。应用程序的windows句柄限制为10000 把手。您需要找到内存泄漏 确保在关闭表单并完成后对表单调用Dispose(),或在表单中使用子句声明表单:
using(Form mainForm = new Form())
{
mainForm.Show();
}
Process Explorer或Windows任务管理器允许您查看GDI对象、句柄、线程和用户对象。您必须对“详细信息”选项卡执行操作,然后选择要查看的列(右键单击列->选择列)。寻找大量GDI对象以确认windows句柄限制确实是问题所在
您正在处理登录表单吗?你提到你有很多控件,你可以用任何方式来限制它们,比如用一个标签和一个文本数组来显示一些东西,而不是用一堆标签或一个文本框网格等等
可以使用的内存分析器的一个示例是.Net内存分析器
(2016年3月30日更新)
修改您提供给我的信息后,我想到了三件事:
这个问题似乎已经得到了回答: 您收到错误是因为您的程序创建了太多错误 把手。应用程序的windows句柄限制为10000 把手。您需要找到内存泄漏 确保在关闭表单并完成后对表单调用Dispose(),或在表单中使用子句声明表单:
using(Form mainForm = new Form())
{
mainForm.Show();
}
Process Explorer或Windows任务管理器允许您查看GDI对象、句柄、线程和用户对象。您必须对“详细信息”选项卡执行操作,然后选择要查看的列(右键单击列->选择列)。寻找大量GDI对象以确认windows句柄限制确实是问题所在
您正在处理登录表单吗?你提到你有很多控件,你可以用任何方式来限制它们,比如用一个标签和一个文本数组来显示一些东西,而不是用一堆标签或一个文本框网格等等
可以使用的内存分析器的一个示例是.Net内存分析器
(2016年3月30日更新)
修改您提供给我的信息后,我想到了三件事: