2009-06-16 5 views
4

J'ai un logiciel qui fonctionne correctement sur beaucoup de machines, bien que sur une machine il y ait un problème qui semble se produire occasionnellement, le MenuStrip et le ToolStrip apparaissent tous les deux comme un blanc vide fond avec une croix rouge dessus, comme un contrôle personnalisé si vous avez créé un objet nul. Cela n'arrive pas pendant que je débogue et je ne sais pas comment faire pour que le problème se reproduise, mais ça arrive. Je me demandais si quelqu'un savait quel pourrait être le problème?Problème de "Red Cross" sur MenuStrip et ToolStrip

Serait-ce la version du framework .NET?

Merci

Répondre

3

Ceci est une occurrence fréquente lorsqu'il existe un problème GDI + ("Le X rouge de la mort"). Faites-vous un dessin personnalisé dans OnPaint? Ou peut-être y a-t-il une ressource graphique ou un glyphe corrompu ou mal disposé.

Modifier: J'ai relu votre question. Vous semblez avoir ceci seulement sur l'une des machines. J'ai fait un peu de googled autour d'un peu pour cela, et je suis tombé sur this old thread. Le poste au fond suggère qu'il pourrait y avoir un problème avec la mémoire virtuelle désactivée:

Nous avons réussi à résoudre ce - nous étions voir le problème sur un appareil en cours d'exécution XP embarqué. Le développeur d'image XPe avait éteint la mémoire virtuelle et comme dès que nous l'avons allumé, le problème est parti. Je crois qu'il est juste un symptôme du système en cours d'exécution sur mémoire pour afficher les graphiques (peut-être surtout si vous utilisez beaucoup de double tampon)

espoir qui aide.

+0

Non, je ne fais pas de dessin personnalisé, il suffit de les utiliser comme standard, je comprends ce que vous voulez dire que je Je suis tombé dessus quand j'ai créé des contrôles personnalisés dans le passé. Merci pour votre aide de toute façon! – ThePower

+0

Désolé, j'ai mal lu votre question la 1ère fois. –

+0

Merci pour la mise à jour et l'information – ThePower

2

Sonne comme un symptôme d'un me Out Of Memory Exception.

Edit: Ce qui peut parfois conduire sur une System.InvalidOperationException: BufferedGraphicsContext

1

Essayez-vous de mettre à jour les commandes de l'interface graphique d'un autre thread que le thread GUI? Combinez l'opération cross thread avec un handler d'exception qui a avalé tout et nous avons eu le comportement que vous décrivez (sur un contrôle de grille, pas une barre de menustrip) sur une application que je maintenais.

1

Semble définitivement comme un problème d'interconnexion.

Assurez-vous d'utiliser Invoke lors de l'accès aux contrôles et/ou des événements de déclenchement à partir d'un thread qui n'est pas le thread principal de l'interface utilisateur.

1

Voyant cela se produire sur un seul ordinateur de plus de 1000 qui ont nos prouducts. Sur ce seul ordinateur, je vois un programme .NET 3.5 afficher occasionnellement le X rouge sur son DataGrid. Et un autre programme .NET 2.0 beaucoup plus simple a obtenu le X rouge sur son menuStrip. J'ai seulement le code source pour le programme plus simple mais je peux dire qu'il n'y a aucun code d'utilisateur qui affecte ce composant. Pas de trucs inter-threads car rien ne le met à jour. Son contenu est défini au moment du développement avec un élément ajouté au chargement du programme. L'échec de Red X était bien après la charge du programme.

J'ai été très surpris de voir le problème sur deux frameworks différents et sur un programme qui n'a pas de liaison de données.J'espère très bien que l'ordinateur a sa mémoire virtuelle éteinte.

Si ce n'est pas le cas, des conseils sur les parties du système partagées entre .NET 2.0 et .NET 3.5 seraient appréciés.

Mise à jour: L'utilisateur du problème est retiré de l'ordinateur et l'a remplacé (ce qui a résolu le problème)