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, у него может быть что-то связанное с выбранным элементом, независимо от того, имеет ли этот элемент текст или целое число. Текст должен быть текстовым, целое число должно быть целым.