我怎样才能让一个ListView更新添加每个项目后? [英] How can I make a ListView update after each item is added?

查看:119
本文介绍了我怎样才能让一个ListView更新添加每个项目后?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图用一个ListView做出实时日志输出到Windows窗体。

I am trying to use a ListView to make a realtime log output to a windows form.

这是假人code:

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

我如何设置,以便它刷新添加每行之后?目前,该应用程序等待,直到生成的列表中,然后加载的完整列表的形式。

How can I set it so it refreshes after each line is added? At the moment the application waits until the list is generated and then loads the form with the complete list.

推荐答案

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

You can fill data items in another thread (for example using task):

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

Application.DoEvents() ... processes all window messages and redraws component.

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

You can call this.Refresh(); instead of Application.DoEvents();

这篇关于我怎样才能让一个ListView更新添加每个项目后?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆