2012-04-14 9 views
0

Ich habe den folgenden Code:C#, war Index außerhalb der Grenzen des Arrays

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]; 
      })); 
    } 

Und es funktioniert gut, aber wenn ich das tue:

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]; 
      })); 
    } 

Es funktioniert nicht und sagt " Index war außerhalb der Grenzen des Arrays".

+3

Sind Sie sicher, dass es '/ n' ist und nicht' \ n'? .. – dasblinkenlight

+1

Sind Sie sicher, dass in Ihrer Zeichenfolge ein Komma steht? Tipp: Es gibt keine. – Ryan

+0

Sie sollten die Nummer der Zeichenfolge in splitSerialData überprüfen, z. mit splitSerialData.Length> 2. – Casperah

Antwort

4

Sie erhalten diesen Fehler, weil serialData kein Komma enthält. Das resultierende Array enthält daher ein Element und der Ausdruck splitSerialData[1] löst die IndexOutOfRangeException aus.

+0

Das ist, was mein Arduino an das Programm sendet: Serial.print (temperatureC); Serial.print (","); Serial.print (lightLux); Serial.print ("/ n"); –

+0

Daten in aussieht wie: 16.37.180.29/n –

+0

@Thomas dein Programm debuggen. Es sieht so aus, als würde das Ereignis ausgelöst *, bevor alle Zeichen empfangen wurden. * Wenn das der Fall ist, müssen Sie die Daten zwischenspeichern, bis alles angekommen ist, und sie dann verarbeiten. – phoog

3

Dies bedeutet, dass die Teilung genau ein Element zurückgibt - die gesamte Zeichenfolge. Es gibt kein Feldelement bei Index 1, so

splitSerialData[1] 

führt die IndexOutOfBounds Ausnahme.

Dies wiederum bedeutet, dass die übergebene Zeichenfolge kein Kommazeichen ',' enthält.

Verwandte Themen