Ben*_*Ben 1 c# logging listview winforms
我试图使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
如何设置它以便在添加每一行后刷新?应用程序等待生成列表,然后加载带有完整列表的表单.
您可以在另一个线程中填充数据项(例如使用任务):
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();
}
}
Run Code Online (Sandbox Code Playgroud)
你可以调用this.Refresh(); 而不是Application.DoEvents();