ComboBox Windows Forms вызывает прерывистое исключение System.AccessViolationException - PullRequest
10 голосов
/ 31 мая 2011

Немного предыстории:

Я искал и в stackoverflow, и в Google, чтобы выяснить происхождение этого конкретного исключения.

У нас есть приложение Windows Forms (C #, .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)

Ответы [ 2 ]

1 голос
/ 31 мая 2011

У меня тоже были эти проблемы, еще когда я использовал Winnetms .net 2.0. Кажется, я помню, Microsoft выпустила исправление для этого. Я гуглил это и нашел эти два. Вы можете попробовать их.

http://support.microsoft.com/kb/923028

http://support.microsoft.com/kb/971030

Кроме того, вы установили все пакеты обновления для .NET 2.0?

0 голосов
/ 18 октября 2011

Не дайте ему возможности перегрузить память, утилизируйте все ваши новые и неиспользованные элементы / элементы управления Не следует постоянно добавлять / удалять объекты в список, как правило, во время операций с потоками.

Проблемы GDI возникают, если вы не очищаете память.

Возникают исключения комбинированного списка, они могут иметь что-то, связанное с выбранным элементом, независимо от того, хранится ли в этом элементе текст или целое число. Текст должен быть текстом, целое число должно быть целым числом.

...