IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#, RichTextBox] CLR error lors d'un affichage dans une RichTextBox


Sujet :

Windows Forms

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 349
    Points : 320
    Points
    320
    Par défaut [C#, RichTextBox] CLR error lors d'un affichage dans une RichTextBox
    Salut !

    J'ai écris une méthode qui affiche du contenu dans une richTextBox. En fait c'est le contenu d'une mémoire donc j'affiche l'adresse, les données hexa, les données ASCII comme le fait un éditeur hexdécimal.

    Quand le contenu de ma mémoire est peu important ça fonctionne très bien mais lorsque que je veux afficher une mémoire d'une taille de 60ko j'ai une "CLR error" et le débugger croit que mon application a planté parce que le traitement est long...

    Voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    //Affichage du contenu de la mémoire
    private void memory_display(firmware_c.MEMORIES memory, byte[] bytebuffer)
    {
         UInt16 memstart   = 0;
         UInt32 memlength = 0;
         RichTextBox currentRichTextBox = richTextBox_memory;
     
         //je vous épargne le calcul de memlength (256 < memlength < 61184)
     
         //Conversion du tableau de byte en tableau de char
         ASCIIEncoding ASCIIEncoder = new ASCIIEncoding();
         char[] charbuffer = ASCIIEncoder.GetChars(bytebuffer);
     
         //Affichage du contenu de la mémoire
         currentRichTextBox.Clear();
         for (int j = 0 ; j < (memlength / 16) ; j++)
         {
              //Affichage de l'adresse
              currentRichTextBox.AppendText("@" + (memstart + j * 0x10).ToString("X4") + " | ");
              //Affichage hexadécimal d'une ligne
              for (int i = 0 ; i < 16 ; i++)
              {
                   currentRichTextBox.AppendText(bytebuffer[i + (16 * j)].ToString("X2") + " ");
              }
              //Séparateur
              currentRichTextBox.AppendText("| ");
              //Affichage ASCII d'une ligne
              for (int i = 0 ; i < 16 ; i++)
              {
                  currentRichTextBox.AppendText("" + charbuffer[i + (16 * j)]);
              }
              currentRichTextBox.AppendText("\n");
              currentRichTextBox.Update();
         }
    }
    Quelqu'un a-t-il déjà rencontré ce problème ? Que puis-je faire pour améliorer mon code et le rendre plus rapide ?

    Merci.

    ++
    Le problème est souvent entre la chaise et le clavier

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 349
    Points : 320
    Points
    320
    Par défaut
    Voici le message d'erreur :

    Le CLR n'a pas pu effectuer de transition du contexte COM 0x1b2008 au contexte COM 0x1b2178 pendant 60 secondes.
    Le thread qui possède le contexte/cloisonnement de destination est probablement en train d'attendre ou de traiter
    une opération très longue sans pompage des messages Windows. Cette situation a généralement des effets négatifs
    sur les performances et peut parfois entraîner le blocage de l'application ou une utilisation ininterrompue de la
    mémoire. Pour éviter ce problème, tous les threads STA (Single Threaded Apartment) doivent utiliser des primitives
    d'attente de pompage (par exemple CoWaitForMultipleHandles) et pomper de manière régulière les messages lors des
    opérations qui sont longues à s'exécuter.
    Le problème est souvent entre la chaise et le clavier

  3. #3
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    c'est un message de l'Assistants de débogage managés (MDA), tu peux le desactiver avec une clé registre

    Diagnostic d'erreurs avec les Assistants de débogage managés
    Mehdi Feki : Modérateur .Net

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 349
    Points : 320
    Points
    320
    Par défaut
    Merci, en le désactivant le traitement aboutit.

    J'ai réécrit ma méthode pour aller plus vite et comme ça je n'ai plus besoin de rien désactiver.

    ++
    Le problème est souvent entre la chaise et le clavier

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 349
    Points : 320
    Points
    320
    Par défaut
    Salut,

    En fait le problème venait du fait que j'accédais trop souvent au contenu de ma richTextBox. Du coup je mets tout dans une chaîne StringBuilder et une fois que la chaîne est construite je l'affiche dans ma richTextBox...

    ++
    Le problème est souvent entre la chaise et le clavier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [HTML:ERROR] affichage dans une popup dédiée
    Par jdvacheron dans le forum Struts 1
    Réponses: 4
    Dernier message: 12/02/2008, 12h17
  2. Réponses: 1
    Dernier message: 13/09/2007, 11h56
  3. [IE]Décalage important lors de l'affichage d'une list verticale
    Par Macintoc dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 13/04/2007, 10h09
  4. Réponses: 7
    Dernier message: 17/12/2006, 01h22
  5. [CSS] Problème lors de l'affichage d'une infobulle
    Par nais_ dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 14/09/2006, 09h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo