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 に答える