在使用我们的应用程序(VB.Net,Winforms,使用框架的v2)时,用户偶尔会遇到上述错误。我无法重现它。 callstack如下:
:System.AccessViolationException:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。 在System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc,IntPtr hWnd,Int32 msg,IntPtr wParam,IntPtr lParam) 在System.Windows.Forms.NativeWindow.DefWndProc(消息& m) 在System.Windows.Forms.Control.DefWndProc(消息& m) 在System.Windows.Forms.Control.WndProc(消息& m) 在System.Windows.Forms.ComboBox.WndProc(消息& m) 在ControlEx.AutoCompleteCombo.WndProc(消息& 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时确定哪个组合导致问题。
任何有关导致此问题的线索都将受到高度赞赏! : - )
答案 0 :(得分:1)
我的代码中的OutOfMemoryException有一种奇怪的非确定性感觉。
你为什么需要那个?如果你需要它,这可能是你的问题的原因吗? OutOfMemoryExceptions非常罕见。如果你有这些,我认为这是一个强烈的迹象,其他错误。
答案 1 :(得分:0)
看起来您正在使用名为AutoCompleteCombo的自定义组合框控件。我怀疑该类中的WndProc覆盖有一个错误 - 可能会改变消息参数的值。你可以发布该方法的代码,以便我们看看吗?
您发布的代码中没有任何内容会导致问题。您应该查看AutoCompleteCombo的其余代码以查找潜在的错误。没有其他任何事情可以继续下去。
答案 2 :(得分:0)
感谢您的投入,GvS和Stu。我正在对OutOfMemory进行更多的探测,发现这可能会发生一种有趣的方式(在组合中添加两个项目,在其ToString覆盖中返回Nothing - http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=247053&SiteID=1)
答案 3 :(得分:0)
我刚刚发现原始异常(AccessViolationException)也是由ComboBox中的一个项引起的,其ToString返回Nothing(null)。我不知道为什么你有时会得到OutOfMemory,有时候是Accessviolation,有时是NullReference例外。
答案 4 :(得分:0)
在黑暗中拍摄,但是您可能在KeyDown,KeyUp或KeyPress事件期间尝试修改自动完成列表?
根据微软的说法,这可以cause access violations。