private void ReportTags() { if (_readerProfile.ReadingMode == ReadingMode.Desktop) { return; } onReportTags(new TagsReports($"{RecentTags.Count} recent tags and {TagsInView.Count} tags in view")); DateTime currentTime = DateTime.Now.ToLocalTime(); logger.Log(LogLevel.Trace, "RecentTags count: " + RecentTags.Count); logger.Log(LogLevel.Trace, $"TagsInView count: {TagsInView.Count}"); foreach (KeyValuePair <string, Split> recentTag in RecentTags) { TimeSpan difference = currentTime - recentTag.Value.DateTimeOfDay; if (difference.TotalSeconds > _readerProfile.GatingTime) { Split removedTag; if (RecentTags.TryRemove(recentTag.Key, out removedTag)) { logger.Log(LogLevel.Trace, "removed " + recentTag.Key); if (removedTag != null) { List <Split> tags; if (TagsInView.TryRemove(removedTag.Epc, out tags)) { logger.Log(LogLevel.Trace, $"TagsInView for {removedTag.Epc} count: {tags.Count}"); Split nearestTag = tags.OrderByDescending(x => x.Rssi).FirstOrDefault(); onRecordTag(nearestTag); } else { onRecordTag(removedTag); } } } else { logger.Log(LogLevel.Trace, "failed to remove recent tag: " + recentTag.Key); } } } }