2015-07-04 20 views
5

Ich versuche, die Herzfrequenz von einem Microsoft Band zu bekommen. Es sollte aktualisiert werden, wenn sich der Wert ändert. Ich versuche dann, diesen Wert in einem TextBlock anzuzeigen. Ich zuerst eine Instanz von IBandClient, erstellen und seine HeartRate.ReadingChanged Methode wie folgt:Holen Sie sich Herzfrequenz von Microsoft Band

bandClient.SensorManager.HeartRate.ReadingChanged += HeartRate_ReadingChanged; 

Dann versuche ich, den Wert wie folgt zu aktualisieren:

private void HeartRate_ReadingChanged(object sender, Microsoft.Band.Sensors.BandSensorReadingEventArgs<Microsoft.Band.Sensors.IBandHeartRateReading> e) 
{ 
    HeartRate = e.SensorReading.HeartRate; 
} 

Herzfrequenz ist ein int Satz wie folgt:

public int HeartRate 
{ 
    get { return (int)GetValue(HeartRateProperty); } 
    set { SetValue(HeartRateProperty, value); } 
} 

// Using a DependencyProperty as the backing store for HeartRate. This enables animation, styling, binding, etc... 
public static readonly DependencyProperty HeartRateProperty = 
    DependencyProperty.Register("HeartRate", typeof(int), typeof(MainPage), new PropertyMetadata(0)); 

Der Text TextBlock ist dann an HeartRate gebunden. Allerdings bekomme ich diesen Fehler beim Versuch zu setzen HeartRate:

Die Anwendung rief eine Schnittstelle, die für einen anderen Thread marshalled wurde. (Ausnahme von HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))

Meine Vermutung ist, dass es versucht, HeartRate zu setzen, während es noch vor dem Rufaufbau wird.

+0

Wissen Sie, ob der SensorManager das Ereignis von einem anderen Thread versendet? Das würde bedeuten, dass Sie versuchen, Ihren TextBlock-Text aus einem anderen Thread als dem UI-Thread zu setzen, was nicht möglich ist (daher der Fehler). – y2bd

Antwort

3

Versuchen Sie, dies zu implementieren und zu sehen, wie es geht, wenn Sie immer noch Ihre int-Variable wollen, dann wandeln Sie es zurück in String, wenn es in einem Textblock angezeigt wird.

await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, 
       () => 
       { 
        Textblock.Text = e.SensorReading.HeartRate.ToString()) 
       }).AsTask(); 
Verwandte Themen