2

我正在尝试使用 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);
        }
    }

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

4

3 回答 3

5

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

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();

于 2013-05-03T10:15:52.527 回答
1

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

也许你应该看看这个:

列表视图项目未显示

于 2013-05-03T09:56:28.710 回答
1

您可以致电this.Invalidate()this.Refresh()在表格上更新它。

于 2013-05-03T09:53:18.620 回答