delphi - TListView.Clear 卡住了我的应用程序,我该如何修复它?

标签 delphi freeze delphi-2009

我的表单上有一个ListView:TListview,并且我添加了很多值(大约25k TListViewItem),它运行得相当快,但是当我调用Listview.Clear时,程序卡住了。我用调试器检查了它,它赢了不要跨过那条线。

我的问题是:我该如何解决我的问题?如果可以在不到一秒的时间内创建这么多项目,为什么删除它们要花很长时间(我等了 5 分钟以上)?

最佳答案

您是否尝试将对 Clear 的调用封装在 BeginUpdate/EndUpdate block 中:

  listview.Items.BeginUpdate;
  try
    listview.Items.Clear;
  finally
    listview.Items.EndUpdate;
  end;

在 ListView (或各种其他控件,例如列表框)中添加/删除项目会针对添加/删除的每个项目触发控件的 GUI 更新。特别是对于 ListView ,这可能非常昂贵,对于 25,000 个项目,开销将是巨大的。

诚然,5 分钟确实听起来有点过分,但这将是我首先要尝试的事情。

关于delphi - TListView.Clear 卡住了我的应用程序,我该如何修复它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1290145/

相关文章:

java - 从 Delphi 到 java 指南?

android - 如何为下一个客户端连接正确重启 Indy TCP Server?

javascript - Node.js 在多个 setTimeout 循环调用上挂起

c - 我的解码器有什么问题?为什么在提示用户后它会卡住?

delphi - 寻找方法/组件来读取/编辑真正的 MS Excel 2007 文件

delphi - 如何判断我的连接是否使用 SSL?

delphi - 如何调试Delphi应用程序中挂起的主线程

delphi - 文件的十六进制 View

multithreading - 将参数传递给同步过程调用

delphi - 如何确定接口(interface)的实现对象的类型