Tengo un hilo de autodetección que intenta abrir los puertos en orden y hacer coincidir los datos recibidos, detectando así el puerto donde el dispositivo pertinente envía los datos. Ahora, hay algunos puertos donde SerialPort.Open simplemente cuelga el hilo durante ~ 30 segundos. ¿Cómo puedo establecer un tiempo de espera en la función SerialPort.Open?C#: Tiempo de espera en SerialPort.Open?
Respuesta
Añadir esta en el código:
commPort = new SerialPort();
commPort.ReadTimeout = 1000000;
commPort.WriteTimeout = 1000000;
y sugiero que veas SerialPort.Open Method
ya hecho ... – gdario
Ok, espero que esto ayude a otro;) –
¿por qué no 'SerialPort.InfiniteTimeout' entonces –
Si he entendido bien, que desea leer datos desde el puerto serie se produjo incluso después de tiempo de espera.
Si es así, entonces debería atrapar el TimeoutException y continuar su ciclo. p.ej. MSDN CODE
public static void Read()
{
while (_continue)
{
try
{
string message = _serialPort.ReadLine();
Console.WriteLine(message);
}
catch (TimeoutException) { }
}
}
De MSDN
Sólo una conexión abierta puede existir por objeto SerialPort.
La mejor práctica para cualquier aplicación es esperar una cierta cantidad de tiempo después de llamar al método Close antes de intentar llamar al método Open, ya que el puerto puede no cerrarse al instante.
Cuando llama a Cerrar(), este subproceso de trabajo necesita tiempo para girar hacia abajo y salir. La cantidad de tiempo necesaria no está especificada y no puede verificar que se haya realizado. Todo lo que puede hacer es esperar al menos un segundo antes de volver a llamar a Abrir().
+1 a la parte sobre tomarse el tiempo para abrir SerialPort después de cerrarlo. Eso me ayudó a mejorar un poco el código. – Yetti
Me encontré con el mismo problema y espero que mi solución pueda ayudarlo.
Puede detectar los puertos serie en una secuencia separada, que será cancelada en 500 ms.
// the Serial Port detection routine
private void testSerialPort(object obj)
{
if (! (obj is string))
return;
string spName = obj as string;
SerialPort sp = new SerialPort(spName);
try
{
sp.Open();
}
catch (Exception)
{
// users don't want to experience this
return;
}
if (sp.IsOpen)
{
if (You can recieve the data you neeed)
{
isSerialPortValid = true;
}
}
sp.Close();
}
// validity of serial port
private bool isSerialPortValid;
// the callback function of button checks the serial ports
private void btCheck(object sender, RoutedEventArgs e)
{
foreach (string s in SerialPort.GetPortNames())
{
isSpValid = false;
Thread t = new Thread(new ParameterizedThreadStart(testSerialPort));
t.Start(s);
Thread.Sleep(500); // wait and trink a tee for 500 ms
t.Abort();
// check wether the port was successfully opened
if (isSpValid)
{
textBlock1.Text = "Serial Port " + s + " is OK !";
}
else
{
textBlock1.Text = "Serial Port " + s + " retards !";
}
}
}
}
Posibles mejoras podrían agregarse a la solución. Puede usar múltiples hilos para acelerar el proceso y usar ProgressBar
para mostrar el progreso con claridad.
- 1. Tiempo de espera del subproceso en C#
- 2. Implemente el tiempo de espera de C#
- 3. Tiempo de espera agotado - Tiempo de espera agotado
- 4. Mecanismo de tiempo de espera de semáforo en C#
- 5. C# Servicio de Windows Tiempo de espera en el inicio
- 6. NSURLConnection tiempo de espera?
- 7. NSURLConnection tiempo de espera
- 8. WCF ¿Tiempo de espera?
- 9. HttpWebRequest Tiempo de espera
- 10. tiempo de espera stringwithcontentsofurl
- 11. Tiempo de espera del socket en C++ Linux
- 12. ¿Puedo establecer el tiempo de espera para UdpClient en C#?
- 13. ¿Cómo diferenciar cuándo espera (tiempo de espera prolongado) salir para notificar o tiempo de espera?
- 14. Tiempo de espera de QNetworkAccessManager
- 15. C: tiempo de espera de conexión de socket
- 16. Tiempo de espera de Python
- 17. Establecer tiempo de espera de solicitud OLE desde C++
- 18. Problema de tiempo de espera en WCF
- 19. Método de tiempo de espera en java
- 20. Tiempo de espera de sesión en ASP.NET
- 21. Tiempo de espera para thread.join()
- 22. feedparser con tiempo de espera
- 23. Tiempo de espera con jQuery.get()
- 24. Tiempo de espera para BackgroundWorker
- 25. exec() con tiempo de espera
- 26. Android GPS tiempo de espera
- 27. java.net.SocketTimeoutException: tiempo de espera agotado
- 28. Tarea fromAsync tiempo de espera
- 29. raw_input y tiempo de espera
- 30. ¿Qué significa "tiempo de espera" y "tiempo de espera abierto" en Faraday?
¿Está iterando sobre los puertos serie de GetPortNames (http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.getportnames.aspx) o simplemente está tratando de abrir COM1, COM2, etc. – SwDevMan81
Tiene el mismo problema. ¿Has resuelto esto mientras tanto? Cheers – tamberg
Estoy teniendo el mismo problema. Sería bueno si hubiera una propiedad 'OpenTimeout'. –