Pregunta

Vista SP1 Visual Studio 2008 SP1 .NET 3.5 SP1 C #

Tengo una aplicación winforms con la que estoy jugando que usa un objeto SerialPort como variable privada. Cuando la aplicación se compila y ejecuta, funciona muy bien. También funciona ejecutándose en modo de depuración sin puntos de interrupción. El 90% de las veces, cuando me detengo en un punto de interrupción e intento pasar por el código, aparece un cuadro de diálogo de "excepción no controlada" con estos detalles:

System.ObjectDisposedException no se manejó   Mensaje = " El mango seguro se ha cerrado "   Fuente = " mscorlib "   ObjectName = " "   StackTrace:        en Microsoft.Win32.Win32Native.SetEvent (controlador SafeWaitHandle)        en System.Threading.EventWaitHandle.Set ()        en System.IO.Ports.SerialStream.AsyncFSCallback (UInt32 errorCode, UInt32 numBytes, NativeOverlapped * pOverlapped)        en System.Threading._IOCompletionCallback.PerformIOCompletionCallback (UInt32 errorCode, UInt32 numBytes, NativeOverlapped * pOVERLAP)   InnerException:

¡Lo frustrante es que no tengo que pasar por alto el código relacionado con la serie! Solo tengo que haber hecho algo con el puerto. Entonces podría leer una cadena, manipularla, sumar dos números, lo que sea, y luego BANG.

Nuevamente, esto funciona bien cuando NO se depura, o cuando se depura sin puntos de interrupción. Parece que hay algo acerca de detenerse en un punto de interrupción que hace que el CLR disponga el SerialStream en un hilo diferente.

Hay muchas conversaciones en línea sobre problemas con la cancelación de dispositivos USB que causan esto. Pero estoy usando el puerto incorporado de la placa base en COM1.

No creo que haya tenido este problema en .NET 2.0, así que quizás tenga que volver a eso ...

Necesito simplificar bastante la aplicación antes de poder publicar código, pero ¿alguien ha visto un comportamiento como este en el depurador antes?

¡Muchas gracias!

¿Fue útil?

Solución

Tuve el mismo problema esta mañana. Sorprendentemente, simplemente desapareció cuando DESHABILITÉ las siguientes opciones en VS2008 Herramientas- > Opciones- > Depuración- > General:

  • " Habilitar el asistente de excepción "
  • " Habilitar paso a paso de fuente de .NET Framework "
  • " Pasar sobre propiedades y operadores "
  • " Habilitar evaluación de propiedades y otras llamadas a funciones implícitas "

No tengo idea de por qué, pero funcionó para mí.

Otros consejos

Quizás el sistema operativo cierre su puerto ya que no obtiene respuesta de su aplicación (se detiene en un punto de interrupción).

Bueno, no estoy tan seguro de que sea una respuesta, pero definitivamente hubo algo sobre ese proyecto. Originalmente fue escrito en 2.0 y convertido a 3.5 por VS2008. ¡Creé un nuevo proyecto en C # -Express 2008 agregando las clases originales una por una y ahora funciona de maravilla! No tengo idea de qué es diferente.

Yo también tengo esto. Esto debe ser algún tipo de error con el depurador. El consejo anterior funcionó: deshabilite la opción "Habilitar evaluación de propiedades y otras llamadas a funciones implícitas".

Tengo una clase con propiedades que hacen E / S en serie. Pensé que tal vez el depurador intentaba mostrar el valor de la propiedad cuando colocaba el mouse sobre él, haciendo el IO desde el hilo del depurador. Pero ese no parece ser el caso. Realmente no estoy seguro de cuál es la causa.

Tuve el mismo problema e hice lo siguiente:

serialPortLock = Monitor.TryEnter(serialPort, 3000);
Thread.Sleep(5);
serialPort.Write(msg, 0, msg.Length);

y lo mismo para mi Read (). ¡Parece que es una buena solución para mí!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top