如何在添加每个项目后进行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()
来更新它。