Hello,

je reçois cette exception, toujours levée au même endroit

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
DEBUG      2012-11-19 14:26:17,505 AcquisitionTerrainServeur AcqTerrainServ -- NotifierVariablesChanged -- Exception : Condition de concurrence critique d'E/S probable détectée lors de la copie dans la mémoire. Le package d'E/S n'est pas thread-safe par défaut. Dans des applications multithread, l'accès au flux doit se faire de façon thread-safe, par exemple un wrapper thread-safe retourné par les méthodes Synchronized de TextReader ou TextWriter. Cela s'applique également aux classes telles que StreamWriter et StreamReader.
Stack :    à System.Buffer.InternalBlockCopy(Array src, Int32 srcOffsetBytes, Array dst, Int32 dstOffsetBytes, Int32 byteCount)
   à System.IO.StreamWriter.Write(Char[] buffer, Int32 index, Int32 count)
   à System.IO.TextWriter.WriteLine(String value)
   à System.IO.TextWriter.SyncTextWriter.WriteLine(String value)
   à AcquisitionContracts.Terrain.AcquisitionTerrainClient.FireListeVariableInfo(List`1 VariablesChanged)
   à AcquisitionContracts.Terrain.AcquisitionTerrainServeur.NotifierVariablesChanged()
Cette méthode commence par faire un appel à une méthode Trace, qui effectue un simple Console.WriteLine, le reste du code étant juste de lever un événement en asynchrone.

Ce qui me choque, c'est que la classe Console est marquée thread-safe, et de plus je ne vois pas d'appel à Console.WriteLine dans la stack, c'est direct TextWriter.SyncTextWriter.WriteLine. A côté j'utilise log4net pour une autre partie du débogage qui renvoie à la fois vers un fichier .txt et vers la console, et je n'avais jamais rencontré ce souci avant...

Une explication ?

Merci