4

用户在使用我们的应用程序(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 时确定是哪个组合导致了问题。

任何关于导致这种情况的线索将不胜感激!:-)

4

5 回答 5

1

我对代码中的 OutOfMemoryException 有一种奇怪的不确定感。

你为什么需要那个?如果您需要它,这可能是您的问题的原因吗?OutOfMemoryExceptions 非常罕见。如果你有这些,我认为这是一个强烈的迹象,表明其他事情是错误的。

于 2008-11-05T13:22:43.503 回答
0

在黑暗中拍摄,但也许您正试图在 KeyDown、KeyUp 或 KeyPress 事件期间修改自动完成列表?

根据微软的说法,这可能会导致访问冲突。

于 2010-04-07T22:00:42.250 回答
0

我刚刚发现原始异常 (AccessViolationException) 也是由于 ComboBox 中有一个项目,其 ToString 返回 Nothing (null)。我不知道为什么有时会出现 OutOfMemory,有时会出现 Accessviolation,有时会出现 NullReference 异常。

于 2009-01-02T14:21:58.813 回答
0

看起来您正在使用一个名为 AutoCompleteCombo 的自定义组合框控件。我怀疑该类中的 WndProc 覆盖有一个错误 - 可能会更改消息参数的值。你能把那个方法的代码贴出来让我们看看吗?


您发布的代码中没有任何内容会导致问题。您可能应该查看 AutoCompleteCombo 的其余代码以了解潜在的错误。真的没有其他事情可以继续了。

于 2008-11-04T16:49:08.157 回答
0

感谢您的意见,GvS 和 Stu。我正在对 OutOfMemory 进行更多探索,并发现了一种可能发生这种情况的有趣方式(将两个项目添加到组合中,在其 ToString 覆盖中返回 Nothing - http://forums.microsoft.com/MSDN/ShowPost.aspx? PostID=247053&SiteID=1 )

于 2008-11-11T14:37:33.443 回答