TListView.Clear冻结我的应用程序,我该如何解决?

Iva*_*nov 2 delphi freeze delphi-2009

我在我的表单上有一个ListView:TListview,并且,我添加了很多值(大约25k TListViewItem),它工作得非常快,但是当我调用Listview.Clear时,程序冻结.我用调试器检查它,它不会步那条线.

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

Del*_*ics 14

您是否尝试在BeginUpdate/EndUpdate块中封闭对Clear的调用:

  listview.Items.BeginUpdate;
  try
    listview.Items.Clear;
  finally
    listview.Items.EndUpdate;
  end;
Run Code Online (Sandbox Code Playgroud)

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

不可否认,5分钟确实听起来过分,但这将是我尝试的第一件事.


Bru*_*Gee 5

我要尝试的第一件事就是用BeginUpdate/EndUpdate将你的调用打包到Clear.

  ListView1.Items.BeginUpdate;
  ListView1.Clear;
  ListView1.Items.EndUpdate;
Run Code Online (Sandbox Code Playgroud)

您是否有任何附加到ListView的事件,并且它们是在清除列表时触发?