【问题标题】:refresh form every 1 second每 1 秒刷新一次表单
【发布时间】: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


【解决方案1】:

你试过了吗?

private void ListViewTrainingQue()
{
    SuspendLayout();
    // do your updating code
    ResumeLayout();
    PerformLayout();
}

【讨论】:

    猜你喜欢
    • 2014-06-01
    • 2023-01-03
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多