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.
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