这样跟新listview的时候会闪动的很厉害。
有什么办法能让它更新的时候不闪动        private void Form1_Load(object sender, EventArgs e)
        {
            listView1.Items.Clear();
            int i;
            for (i=0;i<10;i++)
            {
                ListViewItem lt = new ListViewItem(Convert.ToString(i));
                lt.SubItems.Add("aa");
                lt.SubItems.Add("44");
                lt.SubItems.Add(Convert.ToString(10 - i));
                this.listView1.Items.Add(lt);
            }
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            int i, k;
            for (i = 10; i < 15; i++)
            {
                for (k = 0; k < listView1.Items.Count; k++)
                {
                    if (Convert.ToString(this.listView1.Items[k].SubItems[0].Text) == Convert.ToString(k))
                    {
                        listView1.Items[k].SubItems[2].Text = Convert.ToString("aaa");
                    }
                }
            }
        }

解决方案 »

  1.   

    试试把更新放在BeginUpdate()和EndUpdate()中,看看是否有所改善。        private void timer1_Tick(object sender, EventArgs e)
            {
                int i, k;
                listView1.BeginUpdate();                //<---
                for (i = 10; i < 15; i++)
                {
                    for (k = 0; k < listView1.Items.Count; k++)
                    {
                        if (Convert.ToString(this.listView1.Items[k].SubItems[0].Text) == Convert.ToString(k))
                        {
                            listView1.Items[k].SubItems[2].Text = Convert.ToString("aaa");
                        }
                    }
                }
                listView1.EndUpdate();                  //<---
            }
      

  2.   

    timer1.Interval设置为大于等于2000才无明显的闪烁。最好是修改业务逻辑吧,在数据发生改变时再刷新需要更新的ListViewItem。
      

  3.   

    private void timer1_Tick(object sender, EventArgs e)
            {
                int i, k;
                for (i = 10; i < 15; i++)
                {
                    for (k = 0; k < listView1.Items.Count; k++)
                    {
                        if (Convert.ToString(this.listView1.Items[k].SubItems[0].Text) == Convert.ToString(k))
                        {
                            listView1.Items[k].SubItems[2].Text = Convert.ToString("aaa");
    Application.DoEvents();
                        }
                    }
                }
            }