Question

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

Je joue avec une application Winforms qui utilise un objet SerialPort en tant que variable privée. Lorsque l'application est compilée et exécutée, cela fonctionne très bien. Il fonctionne également en mode débogage sans aucun point d'arrêt. Dans 90% des cas, lorsque je m'arrête à un point d'arrêt et que j'essaie de parcourir le code, un dialogue "Exception non gérée" s'est produit avec les détails suivants:

Exception System.ObjectDisposedException non gérée   Message = " Le descripteur sécurisé a été fermé "   Source = " mscorlib "   ObjectName = " "   Trace de la pile:        sur Microsoft.Win32.Win32Native.SetEvent (descripteur SafeWaitHandle)        sur System.Threading.EventWaitHandle.Set ()        sur System.IO.Ports.SerialStream.AsyncFSCallback (Code d'erreur UInt32, NbOctets UInt32, NativeOverlapped * pOverlapped)        sur System.Threading._IOCompletionCallback.PerformIOCompletionCallback (Code d'erreur UInt32, Nb octets UInt32, NativeOverlapped * pOVERLAP)   InnerException:

Ce qui est frustrant, c’est que je n’ai pas à marcher sur du code lié à la série! Je dois juste avoir quelque chose avec le port. Je peux donc lire une chaîne, manipuler la chaîne, ajouter deux nombres, peu importe, puis BANG.

Encore une fois, cela fonctionne très bien si le débogage N'EST PAS, ou lors du débogage sans points d'arrêt. Il semble y avoir quelque chose à propos de l’arrêt à un point de rupture qui oblige le CLR à disposer le SerialStream sur un autre thread.

Il y a beaucoup de discussions en ligne sur les problèmes liés à la modification des périphériques USB qui en sont la cause. Mais j'utilise le port intégré de la carte mère sur COM1.

Je ne pense pas avoir eu ce problème dans .NET 2.0, donc je devrai peut-être y revenir ...

Je dois simplifier un peu l'application avant de pouvoir poster du code - mais quelqu'un a-t-il déjà vu un comportement comme celui-ci dans le débogueur?

Merci beaucoup!

Était-ce utile?

La solution

J'ai eu le même problème juste ce matin. Étonnamment, il s’est simplement effacé lorsque j’AI DÉSACTIVÉ les options suivantes de VS2008 Outils- > Options- > Débogage- > Général:

  • "Activer l'assistant d'exception"
  • "Activer le pas à pas source .NET Framework"
  • "Passer au-dessus des propriétés et des opérateurs"
  • "Activer l'évaluation des propriétés et autres appels de fonction implicites"

Je ne sais pas pourquoi, mais cela a fonctionné pour moi.

Autres conseils

Peut-être que votre port est fermé par le système d'exploitation car il ne reçoit pas de réponse de votre application (il est arrêté à un point d'arrêt).

Bien, je ne suis pas sûr que ce soit une réponse, mais il y avait vraiment quelque chose à propos de ce projet. Il a été écrit à l'origine en 2.0 et converti en 3.5 par VS2008. J'ai créé un nouveau projet dans C # -Express 2008 en ajoutant les classes originales une par une et cela fonctionne à merveille maintenant! Aucune idée de ce qui est différent.

J'ai ça aussi. Ce doit être une sorte de bogue avec le débogueur. L’avis ci-dessus a fonctionné: Désactivez la case à cocher "Activer l’évaluation des propriétés et les autres appels de fonction implicites".

J'ai une classe avec des propriétés qui font des E / S en série. Je pensais que le débogueur essayait utilement d'afficher la valeur de la propriété lorsque je la survolais avec la souris, réalisant ainsi l'IO à partir du thread du débogueur. Mais cela ne semble pas être le cas. Je ne suis vraiment pas sûr de la cause.

J'ai eu le même problème et j'ai fait ce qui suit:

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

et la même chose pour mon Read (). On dirait que c'est une bonne solution pour moi!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top