У меня есть HID-устройство, с которым я общаюсь с частотой 200хГц-600 Гц, и интерпретирует данные в объект класса, который представляет свойства устройства HID. Класс реализует INotifyPropertyChanged по своим свойствам, и из-за скорости связи, я думаю, что очередь обработки увязнет, поскольку элементы управления, похоже, становятся лагги и «обрамлены» через пару минут.INotifyPropertyChanged boggs down при обработке большого количества данных
Существуют ли методы в .net, которые могут помочь в таких вопросах, возможно, в пуле обработчиков событий или в какой-то очереди?
К сожалению, без моего HID устройства, я не уверен, что мой код никакой пользы никому повторить, но плохо включать пару нужных фрагментов, чтобы показать свою реализацию:
public enum DataEvents { onNone = 0, onStatus = 1, onInput = 2, onOutput = 4, onReport = 8};
public class Controller: INotifyPropertyChanged, IDisposable, INotifyDisposed
{
public event PropertyChangedEventHandler PropertyChanged;
public event EventHandler Disposing;
public event EventHandler Disposed;
public event EventHandler ReportReceived;
internal void callPropertyChanged(string PropertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName));
}
internal void callReportReceived()
{
ReportReceived?.Invoke(this, EventArgs.Empty);
}
public bool Touch1
{
get { return _Touch1; }
private set { if (value != _Touch1) { _Touch1 = value; if (RaiseUpdateEvents.HasFlag(DataEvents.onInput)) callPropertyChanged("Touch1"); } }
}
private bool _Touch1 = false;
//There are many more properties but all of them follow this pattern, and have several different types
}
Мой объект заполняется из a System.Threading.Thread
в цикле, который опросит устройство HID для отчетов. Метод чтения устройств HID является блокирующим вызовом, поэтому цикл не является циклом смерти и ограничен скоростью передачи данных устройства, как обычно указано 200хГц-600 Гц.
EDIT: Стоит отметить, что да, меня особенно интересуют привязки WPF.
Если это Wpf, вы вызываете отставание диспетчера. Повысить событие реже – Gusdor
@Gusdor Ну, событие возникает, когда свойство устройства HID изменяется, поэтому как бы уменьшить его – Wobbles
@Gusdor Im думает о очереди для каждого свойства, где, если несколько событий подняты для свойства, оно очистит все, кроме самое последнее, но я не могу видеть, как это не добавит запаздывания и задержки в себе, особенно на этих скоростях. – Wobbles