我通過藍牙從外部設備接收一些數據,並且我有一個事件處理程序,只要收到數據就會觸發。這是一個非常基本的應用,在那裏我有主網頁當被按下時,執行以下功能上的按鈕:無法訪問Windows Phone 8中的TextBlock屬性
async void BLE_Function()
{
//some code to connect to the device
thermometerCharacteristic.ValueChanged += temperatureMeasurementChanged; //this is where I had a function to the event handler
await thermometerCharacteristic
.WriteClientCharacteristicConfigurationDescriptorAsync(
GattClientCharacteristicConfigurationDescriptorValue.Notify);
}
public void temperatureMeasurementChanged(GattCharacteristic sender, GattValueChangedEventArgs args)
{
//Store the incoming bytes in a byte array called "temperatureData"
foreach (byte b in temperatureData)
{
Debug.WriteLine(b.ToString());
}
}
現在的問題是,我想顯示在一個簡單的TextBlock這也是用戶接收的字節在MainPage上就像上面的代碼一樣,但是當我在foreach循環中寫入MyTextBlock.Text = b.ToString()時,Visual Studio引發了訪問衝突異常。我在BLE_Function()中使用了相同的TextBlock,並且在那裏工作正常,所以我不明白爲什麼我無法通過temperatureMeasurementChanged函數訪問它。下面粘貼有異常的詳細信息:
System.UnauthorizedAccessException的是由用戶代碼
的HResult = -2147024891
消息=無效跨線程訪問未處理。
源= System.Windows
堆棧跟蹤: 在MS.Internal.XcpImports.CheckThread() 在System.Windows.DependencyObject.SetValueInternal(的DependencyProperty DP,對象的值,布爾allowReadOnlySet) 在System.Windows.Controls。 TextBlock.set_Text(字符串值) 在PhoneApp2.MainPage.displayText(字節數據) 在PhoneApp2.MainPage.temperatureMeasurementChanged(GattCharacteristic 發件人,GattValueChangedEventArgs參數)
的InnerException:
提前致謝。
謝謝,這工作,但如果這是一個線程問題,我不明白我能夠直接從異步BLE_Function訪問TextBlock,但不是從偶處理函數? – Ali250 2014-12-06 13:37:54
這是因爲BLE_Function在GUI線程上,而事件處理程序位於單獨的線程上,因爲它是異步調用的。 – venerik 2014-12-06 13:45:48