如何在添加每个项目后进行ListView更新?

我正在尝试使用ListView将实时日志输出到Windows窗体。

这是虚拟代码:

public Form1() { InitializeComponent(); listView1.View = View.Details; listView1.GridLines = false; listView1.Scrollable = true; listView1.FullRowSelect = true; listView1.Columns.Add("Track"); listView1.Columns.Add("Status"); for (int i = 1; i <= 10000; i++) { ListViewItem LVI = new ListViewItem("Track " + i); LVI.SubItems.Add("Updated"); listView1.Items.Add(LVI); listView1.TopItem = LVI; listView1.EnsureVisible(listView1.Items.Count - 1); } } 

如何设置它以便在添加每一行后刷新? 应用程序等待直到生成列表,然后加载带有完整列表的表单。

您可以在另一个线程中填充数据项(例如使用任务):

Application.DoEvents()…处理所有窗口消息和重绘组件。

  public Form1() { InitializeComponent(); listView1.View = View.Details; listView1.GridLines = false; listView1.Scrollable = true; listView1.FullRowSelect = true; listView1.Columns.Add("Track"); listView1.Columns.Add("Status"); Task t = new Task(new Action(() => { RefreshLines(); })); t.Start(); } public void RefreshLines() { if (this.InvokeRequired) { this.Invoke(new MethodInvoker(this.RefreshLines)); } for (int i = 1; i <= 10000; i++) { ListViewItem LVI = new ListViewItem("Track " + i); LVI.SubItems.Add("Updated"); listView1.Items.Add(LVI); listView1.TopItem = LVI; listView1.EnsureVisible(listView1.Items.Count - 1); Application.DoEvents(); } } 

你可以调用this.Refresh(); 而不是Application.DoEvents();

刷新将不起作用,因为它只会更新列表视图中已有的内容,而不是已添加的项目。

也许你应该看看这个:

列表视图项目未显示

您可以在表单上调用this.Invalidate()this.Refresh()来更新它。