Mitigazione: Implementazioni IMessageFilter.PreFilterMessage personalizzate
Nelle app di Windows Forms destinate a versioni di .NET Framework a partire da .NET Framework 4.6.1, un'implementazione di IMessageFilter.PreFilterMessage personalizzata può filtrare in modo sicuro i messaggi quando il metodo Application.FilterMessage viene chiamato se l'implementazione IMessageFilter.PreFilterMessage:
Esegue una o entrambe le opzioni seguenti:
Aggiunge un filtro messaggio chiamando il metodo AddMessageFilter.
Rimuove un filtro messaggio chiamando il metodo RemoveMessageFilter. ProcessOnStatus.
E immette i messaggi chiamando il metodo Application.DoEvents.
Impatto
Questa modifica riguarda solo app Windows Forms destinate a versioni di .NET Framework a partire da .NET Framework 4.6.1.
Per le app Windows Form destinate a versioni precedenti di .NET Framework, questo tipo di implementazioni in alcuni casi genera un'eccezione IndexOutOfRangeException quando viene chiamato il metodo Application.FilterMessage
Mitigazione
Se la modifica è indesiderata, le app destinate a .NET Framework 4.6.1 o versione successiva la possono rifiutare esplicitamente aggiungendo l'impostazione di configurazione seguente alla sezione <runtime> del file di configurazione dell'app:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.DontSupportReentrantFilterMessage=true" />
</runtime>
Le app destinate a versioni precedenti di .NET Framework ma in esecuzione su .NET Framework 4.6.1 o versione successiva possono optare per questo comportamento aggiungendo l'impostazione di configurazione seguente alla sezione <runtime> del file di configurazione dell'app:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.DontSupportReentrantFilterMessage=false" />
</runtime>