Немного истории:
Я искал как stackoverflow, так и Google, чтобы выяснить происхождение этого конкретного исключения.
У нас есть приложение Windows Forms (С#,.NET 2.0), которое будет иногда генерировать исключение System.AccessViolationException(трассировка стека ниже). Исключение произошло как на Windows XP (SP3), так и на Windows Vista (SP2). Из пользовательского ввода мы зафиксировали, что исключение возникает, когда выбранный индекс ComboBox изменяется.
ComboBox является стандартным компонентом Windows Forms и содержится в настраиваемом элементе управления, который наследует System.Windows.Forms.UserControl
.
Мой основной запрос:
Откуда взялось это исключение?
- Это из-за внутренней ошибки в .NET framework?
- Может ли это быть код, отправленный в событие
SelectedIndexChanged
, которое вызывает его?
Связанные темы в stackoverflow:
- найти причину исключения System.AccessViolationException - Предполагает, что это исключение эквивалентно необработанному исключению, только то, что оно попадает в среду выполнения .NET, а не в ОС.
- Может ли System.AccessViolationException произойти из-за неисправности ОЗУ? - Рассматривает неисправную ОЗУ в качестве виновника. Однако, возможно, я не считаю это очень правдоподобным, так как это произошло на нескольких разных машинах в последнее время. Вероятность того, что все из них имеют неисправную ОЗУ, низкая.
Трассировка стека:
Message: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Type: System.AccessViolationException
at System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
at System.Windows.Forms.NativeWindow.DefWndProc(Message& m)
at System.Windows.Forms.Control.DefWndProc(Message& m)
at System.Windows.Forms.Control.WmCommand(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ComboBox.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)