2010-07-01 5 views
0

J'ai rencontré un problème de concurrence. Quelles options dois-je déboguer?Techniques de débogage d'une condition de concurrence dans Silverlight

Plus de détails: J'ai une application Silverlight qui utilise la grille Telerik. Les colonnes peuvent être personnalisées par l'utilisateur en utilisant un sélecteur de colonne attaché à la grille. Dans un cas particulier où la liste des colonnes possibles est créée via le code, quand j'ouvre le sélecteur de colonne et le ferme, les données de la grille (toutes les lignes) disparaissent! Symptômes que je vois qui me mènent à croire que c'est une condition de course: - Si je mets un point d'arrêt sur la ligne columnchooser.close, et quand le point d'arrêt est atteint, continuez simplement, le bug n'est pas visible (toutes les lignes de rang restent visibles) - Si je mets un Thread.Sleep (1000) dans le code juste avant columnchooser.close, le bug disparaît à nouveau - Si je garde la fenêtre "Threads" dans Visual Studio ouverte pendant le débogage, Je vois un fil apparaître et disparaître momentanément dans la fenêtre Threads juste comme je frappe le point d'arrêt à columnchooser.close

Donc, j'ai essayé ce qui suit pour savoir quels threads sont en cours d'exécution à ce moment-là - mais pas de joie:

  1. System.Diagnostics.Process n'est pas disponible dans Silverlight, donc je ne peux pas faire System.Diagnostics.Process.Threads pour obtenir une liste des threads en cours d'exécution par programmation.
  2. J'ai essayé un point d'arrêt avec un "Quand frapper" exécuter Macros.Samples.VSDebugger.DumpStacks, mais je ne pouvais pas comprendre où il vidait toutes les traces de la pile.

Une aide ou des idées sur ce que je peux faire pour déboguer ce problème?

Répondre

0

Sans le code, cela est nécessairement vague, mais avez-vous envisagé de mettre un lock sur les colonnes ou même la grille elle-même. Je ne suis pas sûr comment cela fonctionnerait réellement, mais si (comme vous le supposez) le problème est dû au sélecteur de colonne et le code de création de colonne essayant d'accéder à la grille en même temps alors cela pourrait le résoudre.

Questions connexes