2010-05-03 2 views
4

Mon programme s'arrête fréquemment avec un blocage. Quand je fais une pause-tout et regarde les fils que je vois que trois fils sont coincés dans notre fonction d'enregistrement:Verrous Debug.WriteLine

public class Logging 
{ 
    public static void WriteClientLog(LogLevel logLevel, string message) 
    { 
     #if DEBUG 
     System.Diagnostics.Debug.WriteLine(String.Format("{0} {1}", DateTime.Now.ToString("HH:mm:ss"), message)); //LOCK 
     #endif 
     //...Log4net logging 
    } 
} 

Si je laisse le programme poursuivre les discussions sont encore coincés sur cette ligne.

Je ne vois pas où cela peut se bloquer. La classe de débogage, classe & de la classe de date semble être thread-safe.

L'erreur disparaît lorsque je supprime le code #if DEBUG System... #endif, mais je suis curieux de savoir pourquoi ce comportement se produit.

Fil une:

public void CleanCache() 
{ 
    Logging.WriteClientLog(LogLevel.Debug, "Start clean cache.");//Stuck 
} 

Fil deux:

private void AliveThread() 
{ 
    Logging.WriteClientLog(LogLevel.Debug, "Check connection");//Stuck 
} 
+0

Donc, si vous supprimez simplement les messages if debug et endif, mais laissez la ligne d'écriture dans la méthode, cela fonctionne bien? – Tejs

+0

Avez-vous des écouteurs de trace personnalisés configurés? –

+0

J'ai rencontré un problème similaire ... qui s'est terminé par l'utilisation de la journalisation des librairies d'entreprise de MS. fait pour beaucoup moins de maux de tête. –

Répondre

4

Debug.WriteLine écrit des messages connectant aux auditeurs de trace joints attachés à la collection Listeners.

L'un de vos écouteurs de trace doit posséder un verrou interne qui provoque un blocage. Vérifiez votre code d'écoute, car il est probablement le coupable.

+0

Je n'ai aucun écouteur personnalisé ... – ephraim

Questions connexes