【问题标题】:Add to ListView from background worker从后台工作人员添加到 ListView
【发布时间】:2014-01-15 01:27:07
【问题描述】:

我有一个 WinForm,可以将数据库中的一些元素添加到列表视图中。由于加载所有内容需要相当长的时间,因此我尝试制作后台工作人员。除了添加到列表代码之外,在后台工作人员中一切正常:

ListViewItem lvi = new ListViewItem(event);
lvi.SubItems.Add(name);
lvi.SubItems.Add(status);
lvi.SubItems.Add(x);
lvi.SubItems.Add(y);
lvi.SubItems.Add(z);
TABEL.Items.Add(lvi);

MessageBox.Show("check");

代码未到达消息框并中断循环。但是,如果列表视图不可见,那么它会添加并且到达消息框。 我可以在所有添加完成后使列表视图可见,但我想知道是否有办法让它至少显示它在某些时间间隔添加的内容的一部分..(例如 25%、50% 完成)?

【问题讨论】:

  • it takes quite some time to load everything - 你可能想看看this sort clip
  • 我认为,隐藏列表视图会破坏 bg 工作人员的目的。我做了完全相同的事情 - 使用 bg worker 填充 lw 并且效果很好。让我找到代码...
  • 你犯了不止一个错误。首先忽略 RunWorkerCompleted 事件处理程序中的 e.Error 属性。它告诉你你做错了什么。当您将异常消息粘贴到“搜索”框中时,您会发现 数百 个关于它的问题。
  • @HansPassant 我不知道如何设置 e.error 消息。
  • if (e.Error != null) MessageBox.Show(e.Error.ToString());

标签: c# winforms listview backgroundworker show


【解决方案1】:

您有许多解决方案。我认为这不需要后台工作线程。

例如,您可以尝试:

如果您决定使用后台工作人员,请查看:Populating a listview from another thread

【讨论】:

  • 你好。回复晚了非常抱歉。首先,似乎我的问题实际上在于我从数据库中检索信息的方式(大量不需要的代码。我在记得找到有关 INNER JOIN 命令后将其删除)。尽管如此,您的所有答案都非常有用,尽管我对交叉线程感到非常痛苦,现在我很容易使用它。因此,我将标记为有用并回答,因为我实现了 beginUpdateMethod 以进一步加快速度。干杯!
猜你喜欢
  • 2012-08-21
  • 2015-11-18
  • 2016-01-20
  • 1970-01-01
  • 2014-04-14
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
  • 2015-12-07
相关资源
最近更新 更多