BOTYW 2022-03-28 04:23 采纳率: 100%
浏览 35
已结题

winform 控件越少却越卡顿怎么解决

我使用两个threading.timer来控制两股车流的添加,车流采用的是自定义控件,每股车流10个控件,还有一个threading.timer来控制界面内控件的移动,当有控件移动到屏幕外后使用dispose()释放内存,界面随着控件数的减少不是应该越来越流畅吗,但是反而越来越卡顿,界面的关闭最小化等按钮都无法点击。

不知道是什么原因,求大家帮帮我

  • 写回答

2条回答 默认 最新

  • 於黾 2022-03-28 05:26
    关注

    你while循环里没写sleep吧
    代码呢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    BOTYW 2022-03-28 06:43

    public void timer_Tick(object sender)
    {
    foreach (Control c in this.pictureBox1.Controls)
    {
    Application.DoEvents();
    if (c is CarControl && ((CarControl)c).Beginloc == CarControl.Carloct.Column)
    {

                    if (c.Location.Y <= 160)
                    {
                        ((CarControl)c).Sport = 测试1.CarControl.CarState.Right;
                        this.pictureBox1.Refresh();
                          X_cut_Render(c);                       
                    }
                    else                        
                                Y_cut_Render(c);   
                }
                else if (c is CarControl && ((CarControl)c).Beginloc == CarControl.Carloct.Row )
                {
                    if (c.Location.X <= 450)
                    {
                        ((CarControl)c).Sport = 测试1.CarControl.CarState.Right;
                        this.pictureBox1.Refresh();
                        Y_cut_Render(c);  
                    }
                    else 
                      X_cut_Render(c);
                }
                else continue;    
            }
            ClearMemory();  
        }
    

    这是控制控件移动的代码

    回复
    於黾 回复 BOTYW 2022-03-28 07:48

    你不要乱用Application.DoEvents(),这个函数是当你while死循环,窗体来不及刷新的时候强制刷新用的。你本来就在timer里定时执行,执行完窗体就会自动刷新的,你每移动一个控件就强制刷新一下,肯定会卡的。
    this.pictureBox1.Controls这里不对吧,pictureBox不是容器啊,它里面怎么会还有别的东西

    回复
    於黾 回复 BOTYW 2022-03-28 07:53

    控制控件移动,直接修改控件的Location,它就动了,不要Refresh,也不要DoEvents

    回复
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 4月9日
  • 已采纳回答 4月2日
  • 创建了问题 3月28日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部