用户在使用我们的应用程序(VB.Net、Winforms、使用框架的 v2)时偶尔会遇到上述错误。我无法重现它。调用栈如下:
: System.AccessViolationException: 试图读取或写入受保护的内存。这通常表明其他内存已损坏。在 System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam) 在 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.Control .ControlNativeWindow.OnMessage(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
ControlEx.AutoCompleteCombo.WndProc 的代码如下:
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
添加了错误处理,因此我们可以在收到 OutOfMemoryException 时确定是哪个组合导致了问题。
任何关于导致这种情况的线索将不胜感激!:-)