2016-07-13 200 views
0

我使用C#在Windows 10中查找藍牙低Enegergy設備當我運行下面的代碼,我遇到了這樣的錯誤:C#掃描藍牙LE設備

"An exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll but was not handled in user code".

錯誤的行Debug.WriteLine("Found device: " + devices[0].Id);

我不知道它爲什麼超出範圍。謝謝!

namespace BluetoothLE 
    { 
     /// <summary> 
     /// Interaction logic for MainWindow.xaml 
     /// </summary> 
     public partial class MainWindow : Window 
     { 

      public MainWindow() 
      { 
       InitializeComponent(); 
      } 

      private async void LookForPairedDevices() 
      { 

       // Get BLE devices paired with Windows 
       DeviceInformationCollection devices = await DeviceInformation.FindAllAsync(BluetoothLEDevice.GetDeviceSelector()); 

       Debug.WriteLine("Found device: " + devices[0].Id); 


      } 
     } 

    } 
+0

'DeviceInformation.FindAllAsync(BluetoothLEDevice.GetDeviceSelector()'返回任何設備,因此試圖訪問索引0(第一個項目)拋出一個異常 –

回答

3

你的錯誤是在這條線:

Debug.WriteLine("Found device: " + devices[0].Id); 

如果調試你的代碼,你會看到devices具有長度爲0,而你試圖訪問屬性id第一個(不存在)。

你可能要考慮使用foreach循環,看看返回什麼像這樣:

foreach(var device in devices){ 
    Debug.WriteLine("Found device: " + device.Id); 
} 
+0

如果其中任何一個返回null,你將得到一個空引用異常,而不是參數超出範圍,這個錯誤是關於訪問比存在更多的項目。 –

+0

你是對的,我會編輯 –

+0

Thx爲解釋。 – QuickLearner