2015-07-03 20 views
2

我正在創建一個Windows 8.1電話應用程序。在UI上有一個按鈕和文本框(稱爲txtStatus)Band應用程序稱爲一個接口,被編組爲不同的線程

基本上,當我在UI點擊一個按鈕,下面的代碼序幕(只有一些被示出):

private async void btnStart_Click(object sender, RoutedEventArgs e) 
{ 
    try 
    { 
     // Get the list of Microsoft Bands paired to the phone. 
     IBandInfo[] pairedBands = await BandClientManager.Instance.GetBandsAsync(); 
     if (pairedBands.Length < 1) 
     { 
      txtStatus.Text = "This sample app requires a Microsoft Band paired to your device. Also make sure that you have the latest firmware installed on your Band, as provided by the latest Microsoft Health app."; 
      return; 
     } 

     // Connect to Microsoft Band. 

      using (IBandClient bandClient = await BandClientManager.Instance.ConnectAsync(pairedBands[0])) 
      { 
bandClient.SensorManager.HeartRate.ReadingChanged += HeartRate_ReadingChanged; 
await bandClient.SensorManager.HeartRate.StartReadingsAsync(); 
// Receive Accelerometer data for a while, then stop the subscription. 
await Task.Delay(TimeSpan.FromSeconds(50)); 
await bandClient.SensorManager.HeartRate.StopReadingsAsync(); 
} 
} 
catch (Exception ex) 
{ 
} 



private void HeartRate_ReadingChanged(object sender, Microsoft.Band.Sensors.BandSensorReadingEventArgs<Microsoft.Band.Sensors.IBandHeartRateReading> e) 
     { 
txtStatus.Text = string.Format("Current Heart Rate is: {0}", e.SensorReading.HeartRate.ToString()); 
     } 

當我運行該代碼,它在barfs在處理程序中下面的行:

txtStatus.Text = string.Format("Current Heart Rate is: {0}", e.SensorReading.HeartRate.ToString()); 

異常消息如下:

的一個應用程序稱爲一個界面,編組爲一個不同的線程 。 (從HRESULT異常:0x8001010E (RPC_E_WRONG_THREAD))

這聽起來像UI線程和傳感器讀線程是不同的。任何有關如何使用同一個線程的建議。或者如何在兩個線程之間傳遞數據?

感謝期待。

回答

5

事件在後臺線程上引發。使用CoreDispatcher.RunAsync將其編組回到UI線程:

private async void HeartRate_ReadingChanged(object sender, Microsoft.Band.Sensors.BandSensorReadingEventArgs<Microsoft.Band.Sensors.IBandHeartRateReading> e) 
{ 
    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, 
       () => 
       { 
        txtStatus.Text = string.Format("Current Heart Rate is: {0}", e.SensorReading.HeartRate.ToString()) 
       }).AsTask(); 
} 
相關問題