gpt4 book ai didi

c# - 添加每个项目后如何更新 ListView?

转载 作者:太空宇宙 更新时间:2023-11-03 19:16:25 26 4
gpt4 key购买 nike

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

关于c# - 添加每个项目后如何更新 ListView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16356092/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com