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?
OriginalL'auteur ptutt | 2009-01-08
Vous devez vous connecter pour publier un commentaire.
Quand j'ai eu cette erreur, il s'est avéré vraiment être un problème de déréférencement d'un pointeur null, mais il a fait l'appel à la méthode de toute façon et de ne pas planter jusqu'à ce qu'il a essayé d'accéder à une des variables membres. Je n'ai pas vraiment travaillé avec VB depuis avant les jours de .Net, mais votre trace de la pile indique, il est mort dans un appel des indigènes quelque part. Si c'est le cas, vous pourriez être en cours d'exécution dans la même question, dans ce cas, je vous recommande un double contrôle de ces pointeurs, pas seulement là où il se plante, mais un couple de niveaux trop.
OriginalL'auteur James
L'ajout d'un objet à la collection d'éléments dont la méthode ToString() renvoie rien n'est un moyen facile d'obtenir cela. Il y a probablement d'autres moyens d'atteindre le même comportement.
Procéder à un diagnostic comme si c'était une exception NullReferenceException.
Voir Ce qui est le plus étrange cas de coin vous avez vu en C# ou .NET? pour une autre affaire.
OriginalL'auteur Joshua