J'ai un comportement étrange dans mon application.Temporisations SerialPort en mode autonome
J'ouvre un port COM pour communiquer avec un appareil via Bluetooth. Je fais les étapes suivantes:
- Ouvrez le port COM virtuel;
- Basculer le Bluetooth à distance en mode commande;
- Effectuer quelques commandes (par exemple, lire le numéro de série du périphérique distant);
- Basculer le bluetooth distant vers le mode de données;
- Envoyer des données à l'appareil;
Lit un octet de réponse (ReadByte() à partir de la classe SerialPort);
L'appareil fonctionne bien et répond immédiatement et tout va bien pendant que je cours mon application en mode débogage via Visual Studio.
Mais lorsque je tente de l'exécuter directement (sans visual studio et adebugger attatched - mais toujours compilé avec l'option "Mise au point") i obtenir une exception de délai d'attente à l'étape 6.
Le bug est entièrement reproductible (pas de timeout dans Visual Studio, et à chaque fois sans cela).
Est-ce que quelqu'un a une idée qui pourrait causer un tel comportement?
Voici le code de l'étape 6
private byte[] ReadResponse() {
try {
int bytes2Read = 6;
do {
this.buffer.Append((byte)ReadByte()); // <- there the timeout occurs
if (this.buffer.Length == 6) { // header receiver
// bytes 2 and 3 contain message length
bytes2Read = this.buffer[2] + (this.buffer[3] << 8);
}
} while (this.buffer.Length < bytes2Read);
return this.buffer.ToArray();
} finally {
this.buffer.Clear();
}
}
Le procédé se trouve dans la classe qui dérive de la classe SerialPort.
Par ailleurs - la propriété ReadTimeout du port série est de 2 secondes il est donc temps eanough (les réponses de l'appareil dans miliseconds). –
Toujours, montre le code qui fait la lecture en 6). Enregistre beaucoup de devinettes. –