Domanda

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

Ho un'app Winforms con cui sto giocando che utilizza un oggetto SerialPort come variabile privata. Quando l'applicazione viene compilata ed eseguita, funziona benissimo. Funziona anche in modalità debug senza breakpoint. Il 90% delle volte in cui mi fermo a un punto di interruzione e provo a scorrere il codice, visualizzo una finestra di dialogo "Eccezione non gestita" con questi dettagli:

System.ObjectDisposedException non è stato gestito   Messaggio = " L'handle sicuro è stato chiuso "   Source = " mscorlib "   ObjectName = " "   StackTrace:        su Microsoft.Win32.Win32Native.SetEvent (handle SafeWaitHandle)        at System.Threading.EventWaitHandle.Set ()        at System.IO.Ports.SerialStream.AsyncFSCallback (UInt32 errorCode, UInt32 numBytes, NativeOverlapped * pOverlapped)        at System.Threading._IOCompletionCallback.PerformIOCompletionCallback (UInt32 errorCode, UInt32 numBytes, NativeOverlapped * pOVERLAP)   InnerException:

La cosa frustrante è che non devo passare il codice seriale! Devo solo aver fatto qualcosa con la porta. Quindi potrei leggere una stringa, manipolarla, aggiungere due numeri insieme, qualunque cosa, e quindi BANG.

Ancora una volta, funziona perfettamente quando NON si esegue il debug o quando si esegue il debug senza alcun punto di interruzione. Sembra esserci qualcosa sull'arresto a un punto di interruzione che fa sì che il CLR disponga il SerialStream su un thread diverso.

Ci sono molte chiacchiere online sui problemi che causano il rinnovo dei dispositivi USB. Ma sto usando la porta della scheda madre integrata su COM1.

Non credo di aver avuto questo problema in .NET 2.0, quindi potrei dover tornare su quello ...

Devo semplificare un po 'l'applicazione prima di poter postare il codice - ma qualcuno ha mai visto un comportamento simile nel debugger prima?

Grazie mille!

È stato utile?

Soluzione

Ho avuto lo stesso problema proprio stamattina. Sorprendentemente, è semplicemente scomparso quando ho DISABILITATO le seguenti opzioni in VS2008 Tools- > Options- > Debugging- > General:

  • " Abilita l'assistente eccezioni "
  • " Abilita stepping sorgente .NET Framework "
  • " Passa su proprietà e operatori "
  • " Abilita valutazione proprietà e altre chiamate di funzione implicite "

Non ho idea del perché, ma ha funzionato per me.

Altri suggerimenti

Forse la tua porta viene chiusa dal sistema operativo in quanto non riceve una risposta dall'applicazione (viene interrotta in un punto di interruzione).

Beh, non sono così sicuro che questa sia una risposta, ma c'era sicuramente qualcosa su quel progetto. È stato originariamente scritto in 2.0 e convertito in 3.5 da VS2008. Ho creato un nuovo progetto in C # -Express 2008 aggiungendo le classi originali una per una e ora funziona come un incantesimo! Non ho idea di cosa sia diverso.

Anch'io ho questo. Questo deve essere una specie di bug con il debugger. I consigli sopra riportati hanno funzionato: disabilita " Abilita valutazione proprietà e altre chiamate di funzione implicite. & Quot;

Ho una classe con proprietà che eseguono I / O seriale. Ho pensato che forse il debugger stava cercando di mostrare il valore della proprietà quando ho passato il mouse sopra di esso, facendo così l'IO dal thread del debugger. Ma questo non sembra essere il caso. Non sono sicuro di quale sia la causa.

Ho avuto lo stesso problema e ho fatto quanto segue:

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

e lo stesso per il mio Read (). Sembra che sia una buona soluzione per me!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top