【发布时间】:2016-01-23 02:21:30
【问题描述】:
我已经设法让我的列表视图每秒/2 秒刷新一次,但它像疯了一样闪烁,我该如何解决这个问题?!
我会想一想,这将是由我如何让它刷新造成的。
代码1:
public partial class Skill_Tree : UserControl
{
Skill_View ViewTree;
public Skill_Tree()
{
InitializeComponent();
SkillPanel();
RefreshSkills();
}
private void RefreshSkills()
{
Timer timer123 = new Timer();
timer123.Interval = 2000;
timer123.Tick += new EventHandler(timer1_Tick);
timer123.Start();
}
private void SkillPanel()
{
ViewTree = new Skill_View();
ViewTree.Dock = DockStyle.None;
panel2.Controls.Add(ViewTree);
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
}
private void panel2_Paint(object sender, PaintEventArgs e)
{
}
private void timer1_Tick(object sender, EventArgs e)
{
ViewTree.Dispose();
SkillPanel();
}
}
代码2:
public Skill_View()
{
InitializeComponent();
ListViewTrainingQue();
}
private void ListViewTrainingQue()
{
listView1.View = View.Details;
listView1.GridLines = true;
listView1.FullRowSelect = true;
string string2 = "https://api.eveonline.com/char/SkillQueue.xml.aspx?keyID=4602486&&vCODE=BHGVeXQkRLKLkIkZQHdeyUxmUz9EfUwbvGzoc2eO4ZR8kRMYxk8PbD4LMwLF7BvH";
// Add Columns to listview
listView1.Columns.Add("Name", 108);
listView1.Columns.Add("Level", 100);
listView1.Columns.Add("Remaing Time", 100);
listView1.Columns.Add("Bar", 100);
// string array1 = "2015-10-23 13:00";
// Create Array to return values to.
string[] arr = new string[3];
ListViewItem item;
XmlDocument XMLtrans = new XmlDocument();
XMLtrans.Load(string2);
XmlNodeList TRnodelist = XMLtrans.SelectNodes("/eveapi/result/rowset/row");
foreach (XmlNode xmlnode in TRnodelist)
{
string array1 = xmlnode.Attributes["endTime"].InnerText;
var date = DateTime.Parse(array1);
var Timespan = date - DateTime.Now;
if (xmlnode.Attributes["typeID"] != null)
arr[0] = xmlnode.Attributes["typeID"].InnerText;
if (xmlnode.Attributes["level"] != null)
arr[1] = xmlnode.Attributes["level"].InnerText;
if (xmlnode.Attributes["endTime"] != null)
arr[2] = string.Format("{0}h {1}m {2}s", Timespan.Hours, Timespan.Minutes, Timespan.Seconds);
item = new ListViewItem(arr);
listView1.Items.Add(item);
}
}
当前视图:
【问题讨论】:
-
建议您使用数据绑定,而不是手动刷新。我不确定如何在winforms中做到这一点,但这在wpf中是完全可能的。我认为它在winforms中也是可能的。
-
投票是该死的最后的手段。您的数据集应在列表视图发生更改时通知它 - 然后您仅在必要时更新,而不是不断地以防万一。
-
好吧,因为它在列表视图中有一个“结束时间”,所以我想看到这个在下降。
-
没有必要每 2 秒销毁一次
Skill_View以重新创建它 -
不会占用内存不断创建新表单并将其放在顶部吗?
标签: c# listview refresh windows-forms-designer