2012-08-23 13 views
5

Estoy desarrollando una aplicación de Windows Forms para realizar algunas operaciones en un dispositivo conectado a través de USB. Para todas las operaciones como lectura, escritura y otras cosas, tenemos una biblioteca personalizada.Detener un hilo atascado en una llamada de bloqueo

La operación de escritura se realiza cuando el usuario pulsa un botón.

Para leer, se crea un hilo separado. El problema con la biblioteca disponible es que la llamada de Lectura está bloqueando y tiene el tiempo de espera INFINITO.

En caso de fallo de conexión, este hilo sobresale en la llamada a la función Leer ya que esta función se rompe solo si recibe datos.

¿Cuál podría ser la manera de matar a este hilo en tal escenario? Thread.Abort() no está funcionando.

Estoy usando C# para esta programación.

+1

Si la "biblioteca personalizada" no proporciona * cualquier * significa que cancelar un bloqueo de lectura en un error de conexión, se debe tirar a la basura y usar algo diferente, la verdad. – Clemens

+0

Lo sé .... Ojalá pudiera ... Pero lo mismo es el caso con la clase predeterminada de puerto serie de C# ... La operación de lectura se bloqueará en la conexión fallida, si configuro el tiempo de espera en Infinte. – Swanand

+0

Podría intentar cerrar el "manejador" a lo que está tratando de leer ... luego se cancelará la lectura, supongo ... y su hilo, dependiendo de cómo esté escrito, puede salir. –

Respuesta

1

Ese método de lectura probablemente llama al código nativo, por lo que el hilo no puede abortar. No hay forma (al menos con lo que estoy familiarizado) de abortar el hilo que usa interoperabilidad COM. Podría ver por qué el método de lectura está bloqueando el hilo en primer lugar. Intente verificar los requisitos antes de llamar al método Read.

Tome un vistazo a esta pregunta: Abort call to unmanaged DLL

+0

Correrlo en un proceso separado era lo que estaba considerando. También estaba pensando que podrías PODER ejecutar el código peligroso en otro dominio de la aplicación que pensé que podrías "disparar en la cabeza" también pero ... sufre de la misma falla al abortar un problema de hilo. http://msdn.microsoft.com/en-us/library/system.appdomain.unload.aspx –

+0

¡Gracias por la idea! Pero, ¿cómo ejecutar un único hilo en Different Process? O ¿ejecuta una función como un proceso diferente? – Swanand

+0

Puede crear otra aplicación que se ocupe de la interoperabilidad COM (comunicación usb) y comience esa aplicación como Proceso. A continuación, puede comunicarse con ese proceso a través de Pipes http://msdn.microsoft.com/en-us/library/system.io.pipes.aspx –

Cuestiones relacionadas