Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取具有计时器成员的类项列表中的项的索引_C#_Class_Indexof_System.timers.timer - Fatal编程技术网

C# 获取具有计时器成员的类项列表中的项的索引

C# 获取具有计时器成员的类项列表中的项的索引,c#,class,indexof,system.timers.timer,C#,Class,Indexof,System.timers.timer,我正在尝试查找触发计时器的索引 我在Program.cs中创建了一个类条目列表 static public List<Entry> Table = new List<Entry>(); 列表中的项目是随机创建的。现在列表(列表索引)中的每个计时器都将启动,然后在10000毫秒后,调用CallDeleteEntry 我需要做的是,当调用deleteEntry超过10000ms秒时,传递计时器的索引,这样它就可以删除列表中的该项行 我认为必须在这里修改一些东西才能使它工作

我正在尝试查找触发计时器的索引

我在Program.cs中创建了一个类条目列表

static public List<Entry> Table = new List<Entry>();
列表中的项目是随机创建的。现在列表(列表索引)中的每个计时器都将启动,然后在10000毫秒后,调用CallDeleteEntry

我需要做的是,当调用deleteEntry超过10000ms秒时,传递计时器的索引,这样它就可以删除列表中的该项行

我认为必须在这里修改一些东西才能使它工作

idleTimeOutTimer.Elapsed += (sender, e) => CallDeleteEntry(sender, e, Program.Table.IndexOf());
列表如下所示

列表索引|条目项 0 | pkt | pktTimer 1 | pkt | pktTimer 2 | pkt | pktTimer 3 | pkt | pktTimer
4 | pkt | pktTimer您非常接近的索引需要您试图获取索引的项目。在本例中,您试图获取其索引的条目类。我相信在你的情况下,它将是这个的关键词,所以是这个的索引

@Jason Mastnick

我在给你的评论中提到的上述错误的原因是

            Program.Table.RemoveAt(pktIndex); //Removes Entry at this Index
            Program.Table[pktIndex].idleTimeOutTimer.Stop(); //Stops idleTimeOutTimer of This Entry
我应该先停止计时器,然后取出数据包

            Program.Table[pktIndex].idleTimeOutTimer.Stop(); //Stops idleTimeOutTimer of This Entry
            Program.Table.RemoveAt(pktIndex); //Removes Entry at this Index
顺便说一下,你的解决方案是有效的。我应该这样写

pktTimer.Elapsed += (sender, e) => CallDeleteEntry(sender, e, Program.Table.IndexOf(this));

但是,出现了一个问题。我试着按顺序在列表中添加条目。传递的第一个pktIndex是“1”而不是“0”。因为第一项是在索引0处添加的。在这个连续的场景中,它应该是第一个被删除的。一切都很好,希望索引0处的第一项不会被删除。有什么想法吗?

为了便于测试,我已将计时器时间缩短到1秒。在将条目项添加到列表中之后。1秒后,它调用CallDeleteEntry并抛出一个错误。错误为System.ArgumentOutOfRangeException:'索引超出范围。必须为非负数且小于集合的大小。'我对其进行了调试,pktIndex为-1。有什么想法吗?
idletimeoutimer
在哪里定义的?您的代码只定义了PktTimer。我的错误。idleTimeOutTimer是pktTimer。我只是在这里写代码的时候交换了名字。谢谢你通知我。
pktTimer.Elapsed += (sender, e) => CallDeleteEntry(sender, e, Program.Table.IndexOf(this));