2012-04-14 12 views
0

У меня есть следующий код:C#, Индекс находился вне границ массива

void serialport_DataReceived(object sender, SerialDataReceivedEventArgs e) 
    { 
     string serialData = serialport.ReadExisting().Replace("/n", ""); 
     string[] splitSerialData = serialData.Split(new Char[] {','}); //Split up the data 

     this.Invoke(new Action(delegate() 
      { 
       this.temperatureLabel.Text = splitSerialData[0]; 
      })); 
    } 

И это работает отлично, но когда я делаю:

void serialport_DataReceived(object sender, SerialDataReceivedEventArgs e) 
    { 
     string serialData = serialport.ReadExisting().Replace("/n", ""); 
     string[] splitSerialData = serialData.Split(new Char[] {','}); //Split up the data 

     this.Invoke(new Action(delegate() 
      { 
       this.temperatureLabel.Text = splitSerialData[0]; 
       this.lightLevelLabel.Text = splitSerialData[1]; 
      })); 
    } 

Это не работает, и говорит " Индекс находился вне границ массива".

+3

Вы уверены, что это '/ n', а не' \ n'? .. – dasblinkenlight

+1

У вас есть запятая в вашей строке? Подсказка: нет. – Ryan

+0

Вы должны проверить количество строк в splitSerialData, например. используя splitSerialData.Length> 2. – Casperah

ответ

4

Вы получаете эту ошибку, так как serialData не содержит запятой. Получившийся массив поэтому содержит один элемент, а выражение splitSerialData[1] генерирует исключение IndexOutOfRangeException.

+0

Это то, что мой Arduino отправляет в программу: Serial.print (temperatureC); Serial.print (","); Serial.print (lightLux); Serial.print ("/ n"); –

+0

Данные выглядят так: 16.37,180.29/n –

+0

@Thomas отлаживает вашу программу. Похоже, что событие срабатывает * до того, как все символы были получены. * Если это так, вам понадобится способ кэширования данных до тех пор, пока все не наступит, а затем обработайте его. – phoog

3

Это означает, что split возвращает ровно один элемент - всю строку. Там нет элемента массива с индексом 1, так что

splitSerialData[1] 

бросает IndexOutOfBounds исключение.

Это, в свою очередь, означает, что строка, которую вы передаете, не содержит запятой ','.

Смежные вопросы