Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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:
Agrega un filtro de mensajes llamando al AddMessageFilter método .
Quita un filtro de mensajes llamando al RemoveMessageFilter método . .
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>