Windows Forms ComboBox вызывает прерывистую System.AccessViolationException
Немного истории:
Я искал как 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:
Трассировка стека:
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)
Ответы
Ответ 1
У меня были и эти проблемы, когда я использовал .net 2.0 WinForms. Кажется, я помню, что Microsoft выпустила исправление для этого. Я искал ее и нашел эти два. Вы можете попробовать их.
http://support.microsoft.com/kb/923028
http://support.microsoft.com/kb/971030
Кроме того, вы установили все пакеты обновления для .NET 2.0?
Ответ 2
Не давайте ему возможность перегрузить память, утилизируйте все свои новые и неиспользуемые элементы/элементы управления
Не допускайте постоянного добавления/удаления объектов в список, как правило, во время операций с потоками.
Проблемы с GDI возникают, если вы не очистите память.
Исключаются исключения Combobox, у него может быть что-то связанное с выбранным элементом, независимо от того, имеет ли этот элемент текст или целое число.
Текст должен быть текстовым, целое число должно быть целым.