我有一個HID設備,我在200hz-600hz左右進行通信,並將數據解釋爲表示HID設備屬性的類對象。這個類在其屬性上實現了INotifyPropertyChanged,並且由於通信速度的原因,我認爲處理隊列正在陷入困境,因爲控件在幾分鐘後似乎變得遲鈍而「框架」。當處理大量數據時INotifyPropertyChanged崩潰
在.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
}
我的對象是從填充一個System.Threading.Thread
在循環輪詢HID設備的報告,HID設備讀取方法是一個阻塞呼叫,因此該循環不是死循環,並且被限制爲設備的數據速率,通常聲明爲200hz-600hz。
編輯:值得注意的是,我特別感興趣的WPF綁定。
如果這是Wpf,則會導致分派器上的積壓。不太經常地舉辦活動 – Gusdor
@Gusdor當HID設備屬性發生變化時,會引發該事件,那麼我將如何緩解該問題 – Wobbles
@Gusdor爲每個屬性考慮排隊,如果爲屬性引發多個事件,它將清除所有最近,但我不能看到如何不會增加滯後和延遲本身,特別是在這些速度。 – Wobbles