1

Mon application de base Windows 10 IOT utilise SPI pour collecter les notifications de modification de nombreuses entités. Il existe d'excellents exemples pour lancer une minuterie afin d'obtenir des données SPI, mettre à jour des données et lier des éléments d'interface utilisateur à ces données. Le résultat est à chaque fois que SPI obtient des données sur une entité modifiée, que les données qui les génèrent sont mises à jour et que tout élément de l'interface utilisateur lié à ces données est mis à jour. Je peux même modifier le sous-ensemble de données affiché sur cette page en utilisant des liaisons bidirectionnelles pour suivre les éléments sélectionnés dans une liste.Windows 10 IoT Core, Partage des données SPI

Tout comme les nombreux exemples, mon code est structuré comme suit:

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 

Ma question/question:

Je ne vois pas comment mettre à jour les données de plusieurs pages en fonction de ce qui précède, puisque this.variable fait référence au thread UI de la page qui a lancé le timer.

Il serait trop inefficace de mettre à jour une classe statique et de faire en sorte que les multiples pages interrogent continuellement ces données statiques pour que l'interface utilisateur suive ces grands nombres d'éléments.

Ma seule pensée actuellement est de coder toutes les pages XAML dans une page et un onglet entre ces pages "virtuelles". Je préférerais avoir plusieurs pages pour garder les fonctionnalités de ces pages séparées.

Toute suggestion sur la façon dont je pourrais mettre à jour plusieurs pages à partir de données lues sur un port SPI serait appréciée.

Cordialement, John

Répondre

1

Désolé pour une réponse très tard, mais ma solution serait de créer encore des pages « réelles » - mais « relayée » les données uniquement à la page actuellement visible. Donc, chaque fois qu'une page devient visible, j'aurais fait les parties internes du morceau de code au-dessus de { ... update states of data [...] pour indiquer cette page. Ceci peut être réalisé avec une simple instruction switch, ou par une interface simple avec une méthode HandleSpiData(TheSpiData) - ou même un simple Action<YourSpiData>.