zoukankan      html  css  js  c++  java
  • Winform中node.Text重命名时窗口无响应假死的解决方法

    用户控件中有一个树,窗体使用了这个控件,但是重命名时执行node.text="XXXX" 执行了很长时间,大约9s,在此期间winform界面假死,尝试过多线程异步委托的方式来操作, 还是假死

    再次单步调试,虽然树节点绑定了很多事件,但都是很快就执行完毕的,树是一次加载的,数据量比较大,大约7w个节点,用dot trace跟踪了一下,得到如下结果

    -9,309ms    System.Windows.Forms.TreeNode.set_Text(String)
    
    --9,309ms    System.Windows.Forms.TreeNode.UpdateNode(Int32)
    
    ---9,309ms    System.Windows.Forms.TreeView.ForceScrollbarUpdate(Boolean)
    
    ----9,309ms    System.Windows.Forms.Control.SendMessage(Int32, Int32, Int32)
    
    -----[Native code]()

    耗时还是在node.Text的set方法上,原来对树节点重命名涉及到界面更新,滚动条在大量数据下更新会很缓慢(话说重命名为什么更新滚动条,横向的吗?怎么这么慢?),如何解决呢? 尝试过隐藏树再更新、禁止重绘,设值,恢复重绘,还是不行,找来找去发现有2个解决方案:

    1.实现自绘树,自己去实现树的绘制和界面更新

    2.按需加载,节点在展开的时候清除所有子节点,讲响应节点挂到树上,收起时删除所有节点,并挂载一个空节点以显示+号响应下次展开事件

    实际使用中我用的是第二个方法,第二个方法好处是标准控件,方便日后更新或升级,并且方法强大

  • 相关阅读:
    Mysql 从入门到遗忘
    Centos7开放及查看端口
    创建及修改数据库
    02_python是一种什么语言?
    03_SQL server数据类型
    02_关系数据库
    01_初识数据库
    kali 更新源
    01_Python简介
    Alertmanager高可用
  • 原文地址:https://www.cnblogs.com/haorui/p/3676112.html
Copyright © 2011-2022 走看看