Tentative de lecture ou d'écriture de mémoire protégée. C'est souvent une indication que d'autres de la mémoire a été endommagé

J'ai créé un Winforms saisie semi-automatique de contrôle combobox héritant de la zone de liste déroulante avec la méthode suivante:

Protected Overrides Sub OnKeyPress(ByVal e As System.Windows.Forms.KeyPressEventArgs)
        MyBase.OnKeyPress(e)
        Dim text As String = Me.Text
        If Char.IsLetter(e.KeyChar) Then
            text = text + e.KeyChar
        End If
        If (text.Length = AutoCompleteSearchChars And Char.IsLetter(e.KeyChar)) Then
            SetAutoCompleteMethod.Invoke(text)
            Me.AutoCompleteSource = AutoCompleteSource.ListItems
            Me.Text = text
            Me.SelectionStart = text.Length
            Me.SelectionLength = 0
            If Me.Items.Count > 0 Then
                Me.SelectedIndex = 0
            End If
            e.Handled = True
        End If
    End Sub

La "SetAutoCompleteMethod" est un délégué pointant sur une méthode qui remplit la
zone de liste déroulante des articles basés sur l'utilisation de la version actuelle du texte dans la zone de liste modifiable comme préfixe pour un
recherche de génériques. Cette offre des fonctionnalités similaires à l'ajax autocomplete zone de liste déroulante.

Tout cela fonctionne très bien la première fois qu'elle est appelée, mais la deuxième fois, il est appelé-je obtenir la "Tentative de lecture ou d'écriture de mémoire protégée. C'est souvent une indication que d'autres de la mémoire a été endommagé d'erreur". L'erreur s'affiche après tout le code pour mettre à jour la zone de liste déroulante est terminé. J'ai le trace de la pile:

à
Système.De Windows.Les formulaires.UnsafeNativeMethods.DispatchMessageW(MSG&
msg) à
Système.De Windows.Les formulaires.Application.ComponentManager.Système.De Windows.Les formulaires.
UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32
dwComponentID, Int32 raison, Int32
pvLoopData) à
Système.De Windows.Les formulaires.Application.ThreadContext.RunMessageLoopInner(Int32
raison, ApplicationContext contexte)
au
Système.De Windows.Les formulaires.Application.ThreadContext.RunMessageLoop(Int32
raison, ApplicationContext contexte)
au
Système.De Windows.Les formulaires.Application.Exécuter(ApplicationContext
contexte) à
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
au
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
au
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Exécuter(String[]
ligne de commande) à
ApplicationShell.Mon.MyApplication.Main(String[]
Args) dans
17d14f5c-a337-4978-8281-53493378c1071.vb:ligne
81 à
Système.Domaine d'application._nExecuteAssembly(Assemblée
l'assemblée, String[] args) à
Système.Domaine d'application.ExecuteAssembly(String
assemblyFile, la Preuve
assemblySecurity, String[] args) à
Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
au
Système.Le filetage.ThreadHelper.ThreadStart_Context(Objet
de l'état) à
Système.Le filetage.ExecutionContext.Exécuter(ExecutionContext
executionContext, ContextCallback
rappel, l'état de l'Objet) à
Système.Le filetage.ThreadHelper.ThreadStart()

Quelqu'un est-il en mesure de me pointer dans la bonne direction pour résoudre ce problème?

Je crois que cela a quelque chose à voir avec la source de données. Je définir la source de données la boîte de liste déroulante "rien" avant de charger de nouveaux éléments et l'erreur arrive de moins en moins souvent?

OriginalL'auteur ptutt | 2009-01-08