C# 中的 Listview 慢刷新

发布于 2024-12-03 09:58:47 字数 470 浏览 0 评论 0原文

我有一个 ArrayList 并且它经常变化。

ListView 显示 ArrayList 的数据,因此当 ArrayList 更改时,必须快速更改此 ListView。

所以我写了这样的代码:

ArrayList ar;
ListView lv;

paintmethod()
{
  lv.items.clear();
  lv.addlistview(ar);
  lv.invalidate();
}

private void addlistview(ArrayList arr)
{
  lv.Items.Add(arr.somedata.tostring(),arr.somedata.tostring());
}

这段代码可以工作,但是当 ArrayList 更改时,ListView 不会立即刷新。

20秒、30秒甚至1分钟后刷新。

我怎样才能做更多的事情来解决这个问题?

I have one ArrayList and it changes often.

The ListView displays the ArrayList's data so this ListView must be quickly changed when the ArrayList has changed.

So I wrote code like this:

ArrayList ar;
ListView lv;

paintmethod()
{
  lv.items.clear();
  lv.addlistview(ar);
  lv.invalidate();
}

private void addlistview(ArrayList arr)
{
  lv.Items.Add(arr.somedata.tostring(),arr.somedata.tostring());
}

This code works but when the ArrayList has changed ListView is not refreshed immediately.

It's refreshed 20secs, 30secs or even 1 minute later.

How can I do more to solve this problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

幸福还没到 2024-12-10 09:58:47

尝试下面,看看是否有更好的效果。最好使用 BeginUpdate()EndUpdate() 更新多个 listView 项目时。因为 BeginUpdate() 会阻止控件进行绘制,直到调用 EndUpdate 方法为止。

paintmethod()
{
    lv.BeginUpdate();

    lv.items.clear();
    lv.addlistview(ar);

    lv.EndUpdate();
}

向 ListView 添加多个项目的首选方法是使用
ListView.ListViewItemCollection 的 AddRange 方法(访问
通过 ListView 的 Items 属性)。这使您能够添加
通过一次操作将项目数组添加到列表中。

MSDN

这应该会提高性能很多。

Try below and see any better. It's good practice to use BeginUpdate() and EndUpdate() when updating multiple listView items. Because BeginUpdate() prevents the control from drawing until the EndUpdate method is called.

paintmethod()
{
    lv.BeginUpdate();

    lv.items.clear();
    lv.addlistview(ar);

    lv.EndUpdate();
}

The preferred way to add multiple items to a ListView is to use the
AddRange method of the ListView.ListViewItemCollection (accessed
through the Items property of the ListView). This enables you to add
an array of items to the list in a single operation.

MSDN

This should speeds up performance a lot.

愿得七秒忆 2024-12-10 09:58:47

您是否有理由不将 listview.ItemsSource 绑定到可观察集合?然后,您只需要对可观察集合进行操作,这将逐渐通知列表视图。

Is there are reason you are not binding your listview.ItemsSource to an observablecollection? Then, you would only need to work against the observable collection, and that would notify the listview incremently.

长不大的小祸害 2024-12-10 09:58:47
this.SuspendLayout();
lv.items.clear();
lv.addlistview(ar);
lv.invalidate();
this.ResumeLayout(false);
this.SuspendLayout();
lv.items.clear();
lv.addlistview(ar);
lv.invalidate();
this.ResumeLayout(false);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文