1

Meine Windows 10 IOT-Kernanwendung verwendet SPI, um Änderungsbenachrichtigungen von viele Entitäten zu sammeln. Es gibt ausgezeichnete Beispiele für das Starten eines Timers, um SPI-Daten zu erhalten, Daten zu aktualisieren und UI-Elemente an diese Daten zu binden. Das Ergebnis ist, dass SPI jederzeit Daten über eine geänderte Entität erhält, die Daten aktualisiert werden, die die Benutzeroberfläche steuern, und alle Benutzeroberflächenelemente, die an diese Daten gebunden sind, werden aktualisiert. Ich kann sogar ändern, welche Teilmenge von Daten auf dieser Seite angezeigt wird, indem ich Zweiwege-Bindungen verwende, um die ausgewählten Elemente in einer Liste zu verfolgen.Windows 10 IoT Core, SPI-Daten teilen

Genau wie die vielen Beispiele, mein Code ist wie folgt strukturiert:

public async void Init_SPI() 
     { 
      .... 
      periodicTimer = new Timer(this.TimerCallback, null, 0, 10); 
     } // public async void Init_SPI() 

private void TimerCallback(object state) 
     { 
      /* UI updates must be invoked on the UI thread */ 
      var task = 
      this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,() => 
      { ... update states of data that many be bound to UI element 

Mein Problem/Frage:

Ich sehe nicht, wie die Daten für mehrere Seiten auf der obigen Basis zu aktualisieren, da this.variable auf den UI-Thread der Seite verweist, auf der der Timer gestartet wurde.

Es wäre zu ineffizient, eine statische Klasse zu aktualisieren, und die mehreren Seiten würden kontinuierlich diese statischen Daten abfragen, damit die UI diese große Anzahl von Elementen verfolgt.

Mein einziger Gedanke ist derzeit, alle XAML-Seiten in einer Seite und Registerkarte zwischen diesen "virtuellen" Seiten zu kodieren. Ich hätte lieber mehrere Seiten, um die Funktionalität dieser Seiten getrennt zu halten.

Irgendwelche Vorschläge, wie ich mehrere Seiten von Daten aktualisieren konnte, die auf einem SPI-Port gelesen wurden, würden geschätzt.

Grüße, John

Antwort

1

Es tut uns sehr spät Antwort, aber meine Lösung wäre noch „echte“ Seiten erstellen - aber „weitergeleitet“, um die Daten nur auf die aktuell sichtbaren Seite. Wenn also eine Seite sichtbar wird, hätte ich die Interna des Codeteils über { ... update states of data [...] gemacht, um auf die Seite hinzuweisen. Dies könnte mit einer einfachen switch Anweisung oder durch eine einfache Schnittstelle mit einer HandleSpiData(TheSpiData) Methode - oder sogar eine einfache Action<YourSpiData> erreicht werden.

Verwandte Themen