2013-07-17 1 views
1

J'ai écrit un programme qui lit à partir du port série. Aucun problème avec le programme exécuté sur l'ordinateur sur lequel Visual Studio est installé. Tout va bien. Mais quand j'ai copié le dossier de version à un autre programme et l'exécutez j'ai une erreur System.IO.IOException. J'utilise ce code pour lire les données du port série.Erreur System.IO.IOException

byte[] buffer = new byte[42]; 
int readBytes = 0; 
int totalReadBytes = 0; 
int offset = 0; 
int remaining = 41; 

try 
{ 
    do 
    { 
     readBytes = serial.Read(buffer, offset, remaining); 
     offset += readBytes; 
     remaining -= readBytes; 
     totalReadBytes += readBytes; 
    } 
    while (remaining > 0 && readBytes > 0); 
} 
catch (TimeoutException ex) 
{ 
    Array.Resize(ref buffer, totalReadBytes); 
} 


UTF8Encoding enc = new UTF8Encoding(); 
recieved_data = enc.GetString(buffer, 27, 5);     
Dispatcher.Invoke(DispatcherPriority.Send, new UpdateUiTextDelegate(WriteData), recieved_data); 

Comment puis-je résoudre ce problème?

+5

Veuillez ajouter plus de détails sur l'exception. Connaître le message exat nous aiderait beaucoup. Aussi, est-ce ** tout ** votre code? Utilisez-vous également une bibliothèque non .NET? – Renan

+2

S'il vous plaît lire http://meta.stackexchange.com/questions/10647/how-do-i-write-a-good-title –

+2

2 personnes ont besoin de leurs droits de vote révoqués ... cette question, telle qu'elle est, ne peut pas être utile aux autres .. –

Répondre

1

Il semble que vous lisez plus d'octets que le port a transmis, vous devez vérifier la propriété BytesToRead pour vérifier combien ils sont.

byte[] buffer = new byte[port.BytesToRead]; 
int readBytes = 0; 
int totalReadBytes = 0; 
int offset = 0; 
int remaining = port.BytesToRead; 

try 
{ 
    do 
    { 
     readBytes = serial.Read(buffer, offset, remaining); 
     offset += readBytes; 
     remaining -= readBytes; 
     totalReadBytes += readBytes; 
    } 
    while (remaining > 0 && readBytes > 0); 
} 
catch (TimeoutException ex) 
{ 
    Array.Resize(ref buffer, totalReadBytes); 
} 
+0

Ce code est utile mais parfois le programme lit juste 10 octets ou 12 octets et ne s'attend pas à les lire tous. –

+0

Oui, ce n'était qu'un exemple, vous pouvez le changer. L'important est que le troisième paramètre de la fonction Read doit toujours être inférieur ou égal à BytesToRead –

Questions connexes