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
}
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
Avez-vous des écouteurs de trace personnalisés configurés? –
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. –