2009-06-15 14 views
0

Je débogue un algorithme qui est représenté par un ensemble de ViewModels. Pour déboguer cet algorithme, je voudrais redessiner la vue en passant en revue une partie de l'algorithme. Est-ce possible? (Je préfère simplement repeindre, ne pas faire ce qu'ils appellent "DoEvents" pour traiter tous les événements.)WPF: Comment rafraîchir une fenêtre pendant le débogage?

Répondre

1

Hélas, lorsque votre débogueur s'est arrêté sur un point d'arrêt, le débogueur suspendra tous les threads dans votre application. J'ai un problème similaire, c'est ce que je fais.

1) Au lieu de points d'arrêt, j'ai mis des points de trace avec des informations vraiment détaillées. En studio visuel, si vous mettez des accolades, comme {abc}, la valeur de la variable ABC sera sortie sur la sortie standard

2) Enregistrement. C'est très utile quand vous ne pouvez pas mettre en pause votre programme

3) Gestion des exceptions structurée. Si vous lancez des exceptions en cas de problème, vous pouvez le suivre plus facilement lorsque le programme commence à se dérouler en raison d'une erreur.

4) Affirmez autant que vous le pouvez. De cette façon, si votre programme ne s'arrête pas, cela signifie que tout est bon dans les algorithmes.

+0

C'est dommage. Je déboguais des problèmes avec les graphiques, donc la sortie basée sur le texte est une approche lourde. En principe, il devrait être possible de rafraîchir l'écran pendant le débogage, car j'ai entendu que le moteur de rendu de WPF fonctionne sur un thread distinct de l'application principale. Si l'on pouvait simplement laisser le thread s'exécuter pendant le débogage, ça aurait été bien ... – Qwertie

0

Cette blog post suggère que vous montriez un MessageBox .. Je pense qu'il suppose que vous utilisez WinForms, mais cela pourrait fonctionner de la même manière pour WPF.

+0

Ma fenêtre contenait des informations très graphiques que je voulais rafraîchir pendant le débogage. Une boîte de message ne serait pas beaucoup plus utile qu'une montre de débogueur ou un point de trace. – Qwertie

+0

Je pense que vous pourriez avoir mal compris la suggestion. L'article de blog ne suggère pas d'écrire du texte dans le MessageBox, il suggère d'appeler MessageBox.Show à partir du débogueur afin de forcer un repeindre. Cela ressemble à l'appel de Application.DoEvents depuis le débogueur comme vous l'avez écrit dans votre message d'origine, mais comme l'indique la discussion en bas du blog, il présente un certain avantage: DoEvents ne fait que drainer la file d'attente, puis retourne . Cligne des yeux et tu vas me manquer. Cela pourrait être un problème si vous avez besoin de réorganiser vos windos pour rendre votre formulaire visible. Le MessageBox attendra un clic. –

Questions connexes