Есть класс:LINQ и динамический список Тип
public class SignalRounding
{
public DateTime LastUpdated { get; set; }
public int Quantity { get; set; }
public string symbol { get; set; }
public double price { get; set; }
public double round { get; set; }
}
public class SignalRoundingView
{
public DateTime LastUpdated { get; set; }
public int Quantity { get; set; }
public string symbol { get; set; }
public double price { get; set; }
public double round { get; set; }
}
Создать список
public static List<SignalRounding> SignalR;
SignalR = new List<SignalRounding>();
ListView.ItemsSource = SignalR;
ListView.Items.Refresh();
Добавить информацию с определенными параметрами
try
{
var r = SignalR.Where(t => t.LastUpdated >= DateTime.Now.AddMinutes(-10))
.GroupBy(g => g.symbol)
.Select(s => new SignalRoundingView()
{
LastUpdated = s.Max(x => x.LastUpdated),
Quantity = s.Count(),
symbol = s.Key,
price = s.Single(l => l.LastUpdated == s.Max(x => x.LastUpdated)).price,
round = s.Single(l => l.LastUpdated == s.Max(x => x.LastUpdated)).round
})
.OrderByDescending(x => x.LastUpdated)
.ThenByDescending(x => x.Quantity).ToList();
Filter3List.ItemsSource = r;
Filter3List.Items.Refresh();
}
catch (Exception){throw;}
List<SignalRounding> SignalR
динамична - иногда возникает ошибка , Со следующим описанием: Коллекция была изменена; операция не может быть выполнена перечислением.
Как это исправить?
Вместо этого используйте безопасный список потоков? например 'ConcurrentBag' –
DavidG
Я использую это: 'if (Filter3List.Dispatcher.Thread == Thread.CurrentThread) {code} else Filter3List.Dispatcher.BeginInvoke (новый ThreadStart (delegate {}));' – alexander
Но у вас все еще есть несколько потоков доступ к списку, который будет генерировать исключения. Изменить 'List' to ConcurrentBag ' –
DavidG