2010-05-17 21 views
7

HI,Buscando una alternativa sencilla a Thread.Sleep

Durante el desarrollo de mi aplicación, que estaba usando Thread.Sleep para dar a nuestros dispositivos externos algún tiempo para adaptarse a la configuración antes de hacer consultas, ya que son bastante viejo y lento.

Ahora quiero reemplazarlos por algo un poco más elegante y correcto.

¿Alguien tiene una manera simple de "esperar" un dispositivo en lugar de dormir, teniendo en cuenta que el dispositivo no nos avisa cuando está listo, así que esperar es lo mejor que podemos hacer?

Saludos, George.

Respuesta

7

Puede ser una mejor opción ir por la ruta del uso de un temporizador para despertarse periódicamente y ver si el dispositivo está listo.

Tiene al menos dos opciones aquí System.Timers.Timer o System.Threading.Timer.

Sin embargo, esto probablemente significaría que tendría que involucrarse más en el subprocesamiento múltiple para que el temporizador pueda notificar al resto de su programa que continúe cuando el dispositivo esté listo (por ejemplo, usando WaitHandle o algún tipo, como un AutoResetEvent).

No hay nada intrínsecamente incorrecto con el uso de Thread.Sleep para bloquear un solo subproceso síncrono en mi humilde opinión.

+0

Bueno, si solicita información al dispositivo, simplemente le muestra un mensaje de error de ER, por lo que descubrí que aiting era la mejor opción. Toda la API debe esperar a que este dispositivo responda de todos modos, por lo que si Sleep() no es una mala práctica, me complace continuar utilizándola en subprocesos individuales. Gracias a todos por la información, muy apreciada. – George

+0

Probablemente me inclinaría a dejarlo como está. Comienza a agregar complejidad al tener temporizadores separados que luego tienen que indicarle al resto del programa que el dispositivo ya está listo. –

1

La mejor manera de hacer una espera de aplicación es el uso de Thread.Sleep()

Por supuesto, usted tiene un problema real en el que está necesitando para seleccionar una escala de tiempo arbituary que esperar a que el dispositivo para actualizar.

¿No hay forma de que su aplicación pueda intentar continuar y vuelva a intentarlo si falla debido al estado del dispositivo? (Por supuesto, debería haber un número máximo de intentos)

1

Siempre que realice llamadas desde un hilo de fondo, probablemente no sea una forma terrible de hacerlo. Usted podría también usar un temporizador para devolver la llamada después de un intervalo; más ecomplex (no mucho), pero quizás más fácil de cancelar (por supuesto, también puedes manejar una interrupción de hilo para cancelar un sueño).