C# WinForm 动态添加-删除控件内存未释放

根据需求要在Winform的一个panel中动态的添加控件,处理完后删除(子线程中操作):
for(n)
{
while (panel1.Controls.Count > 0)
{
panel1.Invoke((Action)delegate
{
panel1.Controls.Remove(panel1.Controls[0]);
});
}
panel1中根据条件动态添加控件
……
处理
……
}
跟踪发现内存持续增加。难道是因为panel1.Controls.Remove(panel1.Controls[0]);没有清理干净内存?

第1个回答  推荐于2017-09-04
你只是移除了!!没有释放啊!!
while (panel1.Controls.Count > 0)
{
panel1.Invoke((Action)delegate
{
Control C=panel1.Controls[0]);
panel1.Controls.Remove(C);
C.Dispose();
});
}本回答被提问者和网友采纳
第2个回答  2015-04-24
这个最好是看下添加控件部分的代码,主要是创建实例的部分
第3个回答  2015-04-24
remove 又不回收内存
该有引用的还是要引用到对象上

C# WinForm 动态添加-删除控件内存未释放
你只是移除了!!没有释放啊!!while (panel1.Controls.Count > 0){ panel1.Invoke((Action)delegate { Control C=panel1.Controls[0]);panel1.Controls.Remove(C);C.Dispose();});}

c# winform中我自定义了用户控件,删除时出错
主窗体关闭了,控件自然会被释放,但是控件内执行的线程还在执行,当该线程处理与控件或是窗体相关联的变量当然会报错了,解决方法是等待该线程执行完毕或是强行关闭该线程,或是设置一个开关使线程反回(即方法的return),或是加try块

C# WinForm 如何动态添加控件和设计控件布局
this.controls.add(btn);\/\/添加到窗体中 上面的大致就这样 追问 btn.location=new postion(50,100);\/\/设置坐标布置控件位置的时候怎样才能更方便位置不会根据窗体的变化而变动?在循环生成控件的时候是要根据Form的大小设定btn 的position(x,y),设置完再设置它的Anchor,嗯.就这样.这些代码是放在InitializeComponent(...

C# winform,怎么通过控件的Name属性判断某个控件是否已经存在
if (tabControl1.Controls.Find("控件名字", false).Count(x => x.Name == "控件名字") > 0){ \/\/控件存在 } else { \/\/控件不存在 } 但是一般动态生成的时候,都是自己指定不同的name,所以不用去判断是否重重了。

C#winform窗体释放内存问题
直接this.Close()就行了,因为在FromB.Desiner.cs里面已经重写了Dispose()方法,.net的内部机制能自动释放托管资源内存的,无需程序员控制。

C# WinForm 自定义控件如何实现动态添加子控件
用代码实现就是了撒 button btn=new button();btn...btn.name=""...父容器.controls.add(btn);这样就可以撒。你不用的时候 父容器.controls.remove(btn);

c# winform编程如何有效释放内存
C#中内存是自动释放的..通过你的描述,我认为有可能是你写入时使用的变量的存活期很长..你尽量使用局部变量试试.或者你的变量使用完之后使用.dispose()释放掉 最好把写入文件的代码贴上来~

C#winform 如何实现动态添加menustrip (历史记录功能)
你既然已经会动态添加按钮了,那就完成一大半了。你可以定义一个事件方法,将所有动态添加的按钮的click事件全部绑定至这个方法中。然后,再根据sender参数,对传进来的菜单对象进行处理,就能实现你的这个功能。

winform中动态添加控件
单击button1在panel上动态新建了多个label,现在想要点击选择某个动态新建的label,按button2,可以把这个label删掉在button1_Click事件中,创建label,代码:Label lb1 = new Label(); lb1.Name = "panel"+j; lb1.BackColor = Color.Transparent; lb1.BorderStyle = BorderStyle.FixedSingle; Panel1...

C#WinForm在新线程中动态创建控件时,gif图动不动
这个问题我在WPF中遇到过,Winform中思路应该类似 举个例子,主窗口Mainform 你直接在Load方法中(UI线程)写上,添加一个image,然后写上路径,那么执行后,你会看到窗口上多了一个image控件,然后里面有gif图。但是如果你用的是新建的线程去加载控件,直接就会报错!因为ui线程是不允许被后台线程调用的...

相似回答