C# 从后台工作程序添加到ListView

C# 从后台工作程序添加到ListView,c#,winforms,listview,backgroundworker,show,C#,Winforms,Listview,Backgroundworker,Show,我有一个WinForm,它将数据库中的一些元素添加到listview中。因为加载所有内容需要相当长的时间,所以我尝试制作一个后台工作人员。在后台工作程序中,除了添加到列表代码外,其他一切正常: ListViewItem lvi = new ListViewItem(event); lvi.SubItems.Add(name); lvi.SubItems.Add(status); lvi.SubItems.Add(x); lvi.SubItems.Add(y); lvi.SubItems.Add(

我有一个WinForm,它将数据库中的一些元素添加到listview中。因为加载所有内容需要相当长的时间,所以我尝试制作一个后台工作人员。在后台工作程序中,除了添加到列表代码外,其他一切正常:

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");
代码没有到达messagebox并中断循环。但是如果listview不可见,那么它会添加,并且会访问messagebox。
在所有添加完成后,我可以使listview可见,但我想知道是否有一种方法可以使它在某些时间间隔至少显示添加内容的一部分。。(例如25%,50%完成)?

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

例如,您可以尝试:

  • 使用虚拟模式:
  • 使用BeginUpdate()和EndUpdate():

如果您决定使用后台工作程序,请查看:

加载所有内容需要相当长的时间
-您可能需要查看一下。我认为,隐藏listview不符合bg工作程序的目的。我做了完全相同的事情-填充lw使用bg工人,它工作得很好。让我找到密码…你犯了不止一个错误。首先不要忽略RunWorkerCompleted事件处理程序中的
e.Error
属性。它告诉你你做错了什么。当你将异常消息粘贴到搜索框中时,你会发现数百个问题。@HansPassant我不知道如何设置e.error消息。如果(e.error!=null)消息框。显示(e.error.ToString());你好很抱歉反应太晚。首先,似乎我的问题实际上是在从数据库检索信息的方式上(有很多不需要的代码。我在记住查找内部JOIN命令后消除了它)。不过,您的所有答案都非常有用,尽管我对交叉线程感到非常痛苦,但现在我很容易使用它。因此,我将标记为有用,并回答这个问题,因为我实现了BeginUpdate方法来加快速度。干杯