Algunos historia de fondo:Windows Forms ComboBox causando System.AccessViolationException intermitente
He buscado tanto stackoverflow y Google para averiguar el origen de esta excepción particular.
Tenemos una aplicación de Windows Forms (C#, .NET 2.0) que ocasionalmente lanzará System.AccessViolationException (seguimiento de la pila a continuación). La excepción ha ocurrido tanto en Windows XP (SP3) como en Windows Vista (SP2). De la entrada del usuario, hemos establecido que la excepción se produce cuando se cambia el índice seleccionado de un ComboBox.
ComboBox es un componente estándar de Windows Forms y está contenido en un control personalizado que hereda System.Windows.Forms.UserControl
.
Mi consulta principal es:
dónde viene esta excepción viene?
- ¿Es de algún error interno en .NET Framework?
- ¿Podría ser el código que se envía en el evento
SelectedIndexChanged
que lo causa?
temas relacionados en StackOverflow:
- finding the cause of System.AccessViolationException - menciona que esta excepción es equivalente a una excepción no controlada, sólo que está atrapado por el tiempo de ejecución de .NET en lugar del sistema operativo.
- Can a System.AccessViolationException happen because of faulty RAM? - Considera que la RAM defectuosa es la culpable. Sin embargo, no es muy plausible, ya que ha ocurrido recientemente en varias máquinas diferentes. La probabilidad de que todos ellos tengan RAM defectuosa es baja.
Seguimiento de la pila:
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)
Gracias por la respuesta @rewinder. El segundo enlace podría ser de interés en realidad.Sin embargo, la aplicación de revisiones/service packs es algo que evitaríamos durante el mayor tiempo posible, teniendo la aplicación instalada en cientos de máquinas. Actualmente estoy investigando si el cuadro combinado se altera, mientras que el hilo de la interfaz gráfica de usuario hace algo de trabajo en él: un rumor dice que la implementación subyacente del ComboBox no es completamente segura para subprocesos. – Christoffer
@Christoffer: Ok. Bueno, avísame si encuentras algo. –
Encontré otro tema algo relacionado en el Soporte de Microsoft: http://support.microsoft.com/kb/952544 Pero no estoy usando ninguna característica de autocompletado. Sin embargo, los elementos se pueden agregar a la colección de artículos OnKeyDown o OnSelectedIndexChanged. Todavía no sé si esto puede causar el problema, continuaré mi investigación. – Christoffer