2010-03-08 5 views
0

En cherchant une solution de vérification orthographique gratuite, j'ai pensé que j'étais très intelligent en faisant cela mais je suppose que non.Le contrôle utilisateur WPF provoque une exception de mémoire insuffisante

J'ai créé une application basée sur un formulaire Windows et je souhaite que le formulaire ajoute un nombre de contrôles utilisateur (avec des zones de texte) à un panneau. L'utilisateur peut alors cliquer sur un bouton et les contrôles de ce panneau sont effacés et de nouveaux sont ajoutés. L'utilisateur fait quelque chose et le processus est répété. Maintenant, je voulais que ces boîtes de texte prennent en charge la vérification orthographique et cherchaient partout une solution gratuite.

Les zones de texte WPF prennent en charge la vérification orthographique lorsque celles des formes de gain normales ne le font pas. Je pensais que je serais capable d'utiliser ces boîtes de texte WPF en les ajoutant à un objet ElementHost qui, à son tour, dans un panneau. Ce panneau serait un contrôle utilisateur. Donc, dans mon application, je serais en mesure d'ajouter des instances de ces contrôles utilisateur sur le formulaire et d'utiliser la vérification orthographique de .NET. Cela a effectivement fonctionné, mais après avoir utilisé l'application pendant un certain temps, a constaté que l'application finirait par geler sur moi en raison d'erreurs de mémoire insuffisante. J'ai identifié les erreurs de mémoire à ces contrôles WPF, car ce problème ne se produit pas avec les zones de texte normales.

Lorsque la fenêtre est ouverte et le nombre de contrôles est spécifié, c'est à peu près la façon dont les contrôles sont ajoutés:

Dim xOffset As Integer = 0 
For i As Integer = 0 To theNumber 
    Dim myUserControl As New SpecialUserControl() 
    myPanel.Controls.Add(myUserControl) 
    myUserControl.Location = New Point(7, 7) 
    myUserControl.Location = New Point(xOffset, 7) 
    xOffset = xOffset + 207 
Next 

Notez que:

  • MyPanel est un panneau sur un formulaire
  • SpecialUserControl est le contrôle de l'utilisateur avec WPF zone de texte (dans un objet ElementHost)

Lorsque l'utilisateur appuie sur un bouton, le panneau est effacé:

myUserControl.Controls.Clear() 

L'utilisateur peut alors répéter le processus.

Il y a beaucoup de résultats sur Internet lorsque j'ai essayé de trouver une solution et je pense que le problème que j'ai est dû au fait que le contrôle WPF ne disparaît pas même après avoir effacé le panneau. Suite à cette conclusion, j'ai essayé différentes solutions en ce qui concerne la disposition de ces commandes ou leur mise à zéro, mais le problème de mémoire persiste. Si quelqu'un pouvait me donner des conseils ou des idées ici, je l'apprécierais vraiment.

Répondre

0

J'ai décidé que cela pouvait simplement être dû au fait que ces commandes utilisateur étaient créées plus rapidement qu'elles ne pouvaient être collectées. J'ai changé le programme afin qu'il ne crée aucun de ces contrôles d'utilisateur spéciaux si ce n'est pas nécessaire. Le programme fonctionne très bien avec un nombre plus facile à gérer de contrôles WPF.

Questions connexes