C# 从xml时间创建计时器

C# 从xml时间创建计时器,c#,xml,winforms,C#,Xml,Winforms,我从XML中提取了一个时间,并将其放入listview中,但我希望它倒计时。在如何做到这一点上运气不佳 这是我获取时间的代码&一些图片 Private void ListViewTrainingQue() { listView1.View = View.Details; listView1.GridLines = true; listView1.FullRowSelect = true; string string2 =

我从XML中提取了一个时间,并将其放入listview中,但我希望它倒计时。在如何做到这一点上运气不佳

这是我获取时间的代码&一些图片

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", 50);
        listView1.Columns.Add("Level", 50);
        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);
        }
    } 
这是它的样子


创建
列表视图项目时
将提取的
日期时间
设置为
项目的
标记

item = new ListViewItem(arr);
item.Tag= date;
然后在表单中添加计时器,将
间隔设置为
1000
,并将其
启用
设置为
并处理
勾选
事件:

private void timer1_Tick(object sender, EventArgs e)
{
    foreach (ListViewItem item in listView1.Items)
    {
        var timeSpan = ((DateTime)item.Tag) - DateTime.Now;
        item.SubItems[2].Text = string.Format("{0}h {1}m {2}s",
             timeSpan.Hours, timeSpan.Minutes, timeSpan.Seconds);
    }
}

投票结束。寻求调试帮助的问题(“此代码为什么不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题说明的问题对其他读者没有用。请参阅:如何创建最小、完整且可验证的示例你想让我添加一个失败尝试的例子?我能做到,谢谢!只是仍然没有工作得到一个错误;{“对象引用未设置为对象的实例。”}这是主要思想,您将以这种方式解决此问题。这意味着您忘记在
ListViewTrainingQue
中设置
标记。您应该在创建item
item.Tag=date的循环中设置
标记
您好,您应该了解要点,然后您应该学习如何使用
计时器
,然后您应该学习如何使用
列表视图
。其主要思想是:设置一个计时器,将其设置为每1000毫秒引发
事件,并将逻辑放入事件处理程序中。关于
计时器
:使用
Interval
属性设置引发
勾选
事件的间隔。您还可以在需要时
Stop()
Start()
启动它。关于
ListView
:您可以使用
items
属性查找项目,例如
listView1。项目[0]
是第一个项目。查找项目计数
listView
.items.count`获取项目的子项目:
listView1.items[0]。子项目[0]
,删除位置
listView1.items.RemoveAt(0)
或删除特定项目
listView1.items.remove(项目)