Как обновить ObservableCollection данными, поступающими быстро из многопоточных событий? - PullRequest
0 голосов
/ 16 апреля 2019

Я работаю над библиотекой привязок для Aar. Этот Aar отправляет список данных в новом потоке благодаря RX Java.

Эти данные (которые являются тегами, отсканированными с помощью устройства rfid) отправляются через события в мою программу, которые записываются на

public delegate void InventoryStreamTagsHandler(IList<string> epcS);

/// <summary> observable à s'abonner </summary>
public interface IInventoryCallBack
{
    /// <summary> réception d un stream </summary>
    event InventoryStreamTagsHandler StreamResult;
}

с

private void OnStreamResult(IList<string> epcS)

Его целью является отображение

ObservableCollection<StreamResult> StreamResultS 

с

public class StreamResult : MtcTools.DispatchNotifier
{
    public string Epc { get; }

    public DateTime LastUpdate { get; private set; } = DateTime.Now;

    public int Count { get; private set; } = 1; 

    public StreamResult(string epc)
    {
        Epc = epc;
    }

    public void IncrementeCountAndDate()
    {
        Count++;
        OnPropertyChanged("Count");

        LastUpdate = DateTime.Now;
        OnPropertyChanged("LastUpdate");
    }
}

В каждой полученной информации я ищу уже известный Epc и вызываю IncrementeCountAndDate, если он существует, иначе я создаю новый StreamResult, который добавляю в свою коллекцию ObservableCollection

Но данные приходят быстро и в многопоточности, что у меня нет времени на их обработку Это приложение формы xamarin

1 Ответ

1 голос
/ 16 апреля 2019

Добавить данные в очередь, которые обрабатываются другим потоком?

Если узкое место есть только в пользовательском интерфейсе, вы можете добавить код к своему IncrementeCountAndDate методу только для вызова OnPropertyChanged , если время с момента последнего обновления превышает, например, 250 миллисекунд.

...