Compartir vía


Mitigación: implementaciones personalizadas de IMessageFilter.PreFilterMessage

En las aplicaciones de Windows Forms destinadas a versiones de .NET Framework a partir de .NET Framework 4.6.1, una implementación personalizada de IMessageFilter.PreFilterMessage puede filtrar mensajes de forma segura al llamar al método Application.FilterMessage si la implementación de IMessageFilter.PreFilterMessage:

  • Realiza una o ambas de las siguientes acciones:

  • El elemento And proporciona mensajes mediante una llamada al método Application.DoEvents.

Impacto

Este cambio solo afecta a las aplicaciones de Windows Forms que tienen como destino las versiones de .NET Framework a partir de .NET Framework 4.6.1.

Para las aplicaciones de Windows Forms destinadas a las versiones anteriores de .NET Framework, en algunos casos, tales implementaciones inician una excepción IndexOutOfRangeException cuando se llama al método Application.FilterMessage.

Mitigación

Si este cambio no es deseable, las aplicaciones que tienen como destino .NET Framework 4.6.1 o una versión posterior pueden excluirla agregando la siguiente configuración a la <sección en tiempo de ejecución> del archivo de configuración de la aplicación:

<runtime>
    <AppContextSwitchOverrides value="Switch.System.Windows.Forms.DontSupportReentrantFilterMessage=true" />
</runtime>

Además, las aplicaciones destinadas a versiones anteriores de .NET Framework, pero que se ejecutan en .NET Framework 4.6.1 o una versión posterior pueden optar por este comportamiento agregando la siguiente configuración a la<> sección runtime del archivo de configuración de la aplicación:

<runtime>
    <AppContextSwitchOverrides value="Switch.System.Windows.Forms.DontSupportReentrantFilterMessage=false" />
</runtime>

Consulte también