2008-11-04 5 views
3

Les utilisateurs obtiennent l'erreur ci-dessus occassionally lors de l'utilisation de notre application (VB.Net, Winforms, en utilisant v2 du cadre). Je ne suis pas capable de le reproduire. Le callstack est la suivante:AccessViolationException d'un combo: Tentative de lecture ou d'écriture mémoire protégée

: System.AccessViolationException: Tentative de lecture ou d'écriture de mémoire protégée. C'est souvent une indication que l'autre mémoire est corrompue. à System.Windows.Forms.UnsafeNativeMethods.CallWindowProc (IntPtr WNDPROC, IntPtr hWnd, Int32 msg, IntPtr wParam, lParam IntPtr) à System.Windows.Forms.NativeWindow.DefWndProc (message & m) à System.Windows.Forms .Control.DefWndProc (message & m) à System.Windows.Forms.Control.WndProc (message & m) à System.Windows.Forms.ComboBox.WndProc (message & m) à ControlEx.AutoCompleteCombo.WndProc (message & m) à System.Windows.Forms.ControlNativeWindow.OnMessage (Message & m) à System.Windows.Forms.ControlNativeWindow.WndProc (Message & m) à System.Windows.Forms.NativeWindow.Callback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Le code de ControlEx.AutoCompleteCombo.WndProc est la suivante:

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) 
    Try 
     If Not m_fReadOnly Then 
      MyBase.WndProc(m) 
     Else 
      Select Case m.Msg 
       Case WM_LBUTTONDOWN, WM_LBUTTONDBLCLK 
        ' do nothing 
       Case Else 
        MyBase.WndProc(m) 
      End Select 
     End If 
    Catch ex As OutOfMemoryException 
     Throw New OutOfMemoryException("Exception during WndProc for combo " & Me.Name, ex) 
    End Try 
End Sub 

La gestion des erreurs a été ajoutée afin que nous puissions déterminer quel combo provoque le problème lorsque nous obtenons une exception OutOfMemoryException. Des indices sur les causes de cette situation seraient grandement appréciés! :-)

Répondre

0

On dirait que vous utilisez un contrôle de zone de liste déroulante personnalisée appelée AutoCompleteCombo. Je suppose que le remplacement de WndProc dans cette classe a un bogue dedans - probablement changer la valeur du paramètre de message. Pouvez-vous poster le code de cette méthode afin que nous puissions jeter un oeil?


Il n'y a rien dans le code que vous avez publié qui causerait un problème. Vous devriez probablement regarder le reste du code de AutoCompleteCombo pour les bogues potentiels. Il n'y a vraiment rien d'autre à faire.

1

J'ai un étrange sentiment non déterministe avec le OutOfMemoryException dans votre code.

Pourquoi avez-vous besoin de cela? Et si vous en avez besoin, cela peut-il être la cause de vos problèmes? OutOfMemoryExceptions sont très rares. Si vous les avez, je pense que c'est une indication forte que quelque chose d'autre est faux.

0

Je viens de trouver que l'exception originale (AccessViolationException) est également provoquée par avoir un élément dans le ComboBox dont ToString renvoie Nothing (null). Je ne sais pas pourquoi vous obtenez parfois OutOfMemory, parfois Accessviolation et parfois une exception NullReference.

0

Prise de vue dans l'obscurité, mais peut-être que vous essayez de modifier la liste lors d'une saisie semi-automatique KeyDown, KeyUp ou événement KeyPress?

Cela peut cause access violations selon Microsoft.

Questions connexes