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 (メッセージ & 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 でSystem.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) の .ControlNativeWindow.OnMessage(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

AutoCompleteCombo というカスタム コンボ ボックス コントロールを使用しているようです。そのクラスの WndProc オーバーライドにはバグがあると思われます - おそらくメッセージパラメータの値を変更しています。そのメソッドのコードを投稿していただけますか?


あなたが投稿したコードには、問題を引き起こすものは何もありません。潜在的なバグがないかどうか、AutoCompleteCombo の残りのコードを確認する必要があります。他に何もする必要はありません。

于 2008-11-04T16:49:08.157 に答える
0

元の例外 (AccessViolationException) も、ToString が Nothing (null) を返す項目が ComboBox にあることが原因であることがわかりました。OutOfMemory、Accessviolation、NullReference 例外が発生する理由がわかりません。

于 2009-01-02T14:21:58.813 に答える
0

暗闇で撮影しましたが、KeyDown、KeyUp、または KeyPress イベント中に AutoComplete リストを変更しようとしている可能性がありますか?

Microsoft によると、これによりアクセス違反が発生する可能性があります。

于 2010-04-07T22:00:42.250 に答える
0

GvS と Stu さん、ご意見ありがとうございます。私は OutOfMemory についてもう少し詳しく調査しており、これが発生する可能性がある興味深い方法を見つけました (ToString オーバーライドで Nothing を返す 2 つの項目をコンボに追加する - http://forums.microsoft.com/MSDN/ShowPost.aspx? PostID=247053&SiteID=1 )

于 2008-11-11T14:37:33.443 に答える