如何使计数器增加到1以上?事件处理程序C#

如何使计数器增加到1以上?事件处理程序C#,c#,scope,rfid,C#,Scope,Rfid,因此,我使用Impinj OctaneSDK运行R420读卡器,收集现有标签清单,并在一些文本框中显示每种类型标签的编号 用于发现标记的事件处理程序非常简单,并且来自读取器的标记报告是可配置的。我正在做所有的操作来计算事件处理程序中每种类型的标记,我担心这会导致我只能达到最大值1。(还值得注意的是,我通过将标记从列表中删除来处理标记在一段时间内不可见的情况。) 有人知道如何使列表在事件处理程序调用的实例之间相对容易地持久化吗 void OnTagsReported(ImpinjReader se

因此,我使用Impinj OctaneSDK运行R420读卡器,收集现有标签清单,并在一些文本框中显示每种类型标签的编号

用于发现标记的事件处理程序非常简单,并且来自读取器的标记报告是可配置的。我正在做所有的操作来计算事件处理程序中每种类型的标记,我担心这会导致我只能达到最大值1。(还值得注意的是,我通过将标记从列表中删除来处理标记在一段时间内不可见的情况。)

有人知道如何使列表在事件处理程序调用的实例之间相对容易地持久化吗

void OnTagsReported(ImpinjReader sender, TagReport report )
    {
        // This event handler is called asynchronously 
        // when tag reports are available.
        // Loop through each tag in the report 
        // and print the data.


        List <Tag> listMed1 = new List<Tag>();
        List<Tag> listMed2 = new List<Tag>();
        List<Tag> listMed3 = new List<Tag>();
        List<Tag> listMed4 = new List<Tag>();
        List<Tag> listMed5 = new List<Tag>();
        List<Tag> tags = new List<Tag>();
        foreach (Tag tag in report)
        {

            ushort AntennaNum = tag.AntennaPortNumber;

            tags.Add(tag);
            int size = tags.Count();
            int i = 0;
            while (i < size)
            {
                Impinj.OctaneSdk.TagData first = tags[i].Epc;
                string epcCheck = first.ToString();

                if (epcCheck.IndexOf("A") != -1)
                {
                    listMed1.Add(tags[i]);
                }
                if (epcCheck.IndexOf("B") != -1)
                {
                    listMed2.Add(tags[i]);
                }
                if (epcCheck.IndexOf("C") != -1)
                {
                    listMed3.Add(tags[i]);
                }
                if (epcCheck.IndexOf("D") != -1)
                {
                    listMed4.Add(tags[i]);
                }
                if (epcCheck.IndexOf("E") != -1)
                {
                    listMed5.Add(tags[i]);
                }
                i++;
            }



            int Med1num = listMed1.Count();
            int Med2num = listMed2.Count();
            int Med3num = listMed3.Count();
            int Med4num = listMed4.Count();
            int Med5num = listMed5.Count();
            int loopr1 = 0;
            int loopr2 = 0;
            int loopr3 = 0;
            int loopr4 = 0;
            int loopr5 = 0;

            while (loopr1< Med1num)
            {
                Impinj.OctaneSdk.ImpinjTimestamp second = listMed1[loopr1].LastSeenTime;
                string milisecondsUTC = second.ToString();
                long lastseen = Convert.ToInt64(milisecondsUTC);
                TimeSpan t = DateTime.UtcNow - new DateTime(1970, 1, 1);
                long secondsSinceEpoch = (long)t.TotalMilliseconds;
                if (secondsSinceEpoch - lastseen > 5000 )
                {
                    listMed1.RemoveAt(loopr1);
                }
                loopr1++;
            }
            while (loopr2 < Med2num)
            {
                Impinj.OctaneSdk.ImpinjTimestamp second = listMed2[loopr2].LastSeenTime;
                string milisecondsUTC = second.ToString();
                long lastseen = Convert.ToInt64(milisecondsUTC);
                TimeSpan t = DateTime.UtcNow - new DateTime(1970, 1, 1);
                long secondsSinceEpoch = (long)t.TotalMilliseconds;
                if (secondsSinceEpoch - lastseen > 5000)
                {
                    listMed2.RemoveAt(loopr2);
                }
                loopr2++;
            }
            while (loopr3 < Med3num)
            {
                Impinj.OctaneSdk.ImpinjTimestamp second = listMed3[loopr3].LastSeenTime;
                string milisecondsUTC = second.ToString();
                long lastseen = Convert.ToInt64(milisecondsUTC);
                TimeSpan t = DateTime.UtcNow - new DateTime(1970, 1, 1);
                long secondsSinceEpoch = (long)t.TotalMilliseconds;
                if (secondsSinceEpoch - lastseen > 5000)
                {
                    listMed3.RemoveAt(loopr3);
                }
                loopr3++;
            }
            while (loopr4 < Med4num)
            {
                Impinj.OctaneSdk.ImpinjTimestamp second = listMed4[loopr4].LastSeenTime;
                string milisecondsUTC = second.ToString();
                long lastseen = Convert.ToInt64(milisecondsUTC);
                TimeSpan t = DateTime.UtcNow - new DateTime(1970, 1, 1);
                long secondsSinceEpoch = (long)t.TotalMilliseconds;
                if (secondsSinceEpoch - lastseen > 5000)
                {
                    listMed4.RemoveAt(loopr4);
                }
                loopr4++;
            }
            while (loopr5 < Med5num)
            {
                Impinj.OctaneSdk.ImpinjTimestamp second = listMed5[loopr5].LastSeenTime;
                string milisecondsUTC = second.ToString();
                long lastseen = Convert.ToInt64(milisecondsUTC);
                TimeSpan t = DateTime.UtcNow - new DateTime(1970, 1, 1);
                long secondsSinceEpoch = (long)t.TotalMilliseconds;
                if (secondsSinceEpoch - lastseen > 5000)
                {
                    listMed5.RemoveAt(loopr5);
                }
                loopr5++;
            }
            Med1num = listMed1.Count();
            Med2num = listMed2.Count();
            Med3num = listMed3.Count();
            Med4num = listMed4.Count();
            Med5num = listMed5.Count();

            SetText(Med1num, Med2num, Med3num, Med4num, Med5num);



        }


    }
void ontags报告(ImpinjReader发送方,TagReport报告)
{
//此事件处理程序被异步调用
//标记报告可用时。
//循环查看报告中的每个标记
//并打印数据。
List listMed1=新列表();
List listMed2=新列表();
List listMed3=新列表();
List listMed4=新列表();
List listMed5=新列表();
列表标签=新列表();
foreach(报告中的标记)
{
ushort AntennaNum=tag.AntennaPortNumber;
标签。添加(标签);
int size=tags.Count();
int i=0;
而(i5000)
{
列表MED1.移除(loopr1);
}
loopr1++;
}
while(loopr25000)
{
列表MED2.移除(loopr2);
}
loopr2++;
}
while(loopr35000)
{
列表MED3.移除(loopr3);
}
loopr3++;
}
while(loopr45000)
{
列表med4.RemoveAt(loopr4);
}
loopr4++;
}
while(loopr55000)
{
列表MED5.移除(loopr5);
}
loopr5++;
}
Med1num=listMed1.Count();
Med2num=listMed2.Count();
Med3num=listMed3.Count();
Med4num=listMed4.Count();
Med5num=listMed5.Count();
SetText(Med1num、Med2num、Med3num、Med4num、Med5num);
}
}

将标记变量移出函数,因为每次调用事件时,它都会重新实例化并初始化为count=0

List<Tag> tags = new List<Tag>();

void OnTagsReported(ImpinjReader sender, TagReport report )
{
  ...
}
列表标签=新的L
void OnTagsReported(ImpinjReader sender, TagReport report)
{
    List<Tag> tags = report.ToList();

    var lists =
        new [] { "A", "B", "C", "D", "E", }
            .Select(c =>
                tags
                    .Where(tag => tag.Epc.ToString().IndexOf(c) != -1)
                    .ToList())
            .ToList();

    foreach (var list in lists)
    {
        list.RemoveAll(tag =>
        {
            Impinj.OctaneSdk.ImpinjTimestamp second = tag.LastSeenTime;
            string milisecondsUTC = second.ToString();
            long lastseen = Convert.ToInt64(milisecondsUTC);
            TimeSpan t = DateTime.UtcNow - new DateTime(1970, 1, 1);
            long secondsSinceEpoch = (long)t.TotalMilliseconds;
            return secondsSinceEpoch - lastseen > 5000;
        });
    }

    SetText(lists.Select(list => list.Count()).ToArray());
}