Sto cercando di ottenere la frequenza cardiaca da una Microsoft Band. Dovrebbe essere aggiornato ogni volta che il valore cambia. Sto quindi cercando di visualizzare quel valore in un TextBlock
. I primi creare un'istanza di IBandClient
, e impostare il suo metodo HeartRate.ReadingChanged
simili:Ottieni la frequenza cardiaca da Microsoft Band
bandClient.SensorManager.HeartRate.ReadingChanged += HeartRate_ReadingChanged;
Allora provo per aggiornare il valore così:
private void HeartRate_ReadingChanged(object sender, Microsoft.Band.Sensors.BandSensorReadingEventArgs<Microsoft.Band.Sensors.IBandHeartRateReading> e)
{
HeartRate = e.SensorReading.HeartRate;
}
frequenza cardiaca è un int
insieme in questo modo:
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));
Il testo TextBlock
viene quindi associato a HeartRate
. Tuttavia, continuo a ricevere questo errore quando provo a impostare HeartRate
:
L'applicazione ha chiamato un'interfaccia che è stata sottoposta a marshalling per un thread diverso. (Eccezione da HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))
La mia ipotesi è che si sta cercando di impostare HeartRate
mentre è ancora stato impostato dalla chiamata prima.
Sapete se il SensorManager sta inviando l'evento da un altro thread? Ciò significa che stai cercando di impostare il testo TextBlock da un thread diverso rispetto al thread dell'interfaccia utente, cosa che non puoi fare (da qui l'errore). – y2bd