Condividi tramite


Mitigazione: implementazioni IMessageFilter.PreFilterMessage personalizzate

Nelle app Windows Form destinate alle versioni di .NET Framework a partire dal .NET Framework 4.6.1, una implementazione personalizzata IMessageFilter.PreFilterMessage può filtrare in modo sicuro i messaggi quando viene chiamato il metodo Application.FilterMessage se l'implementazione IMessageFilter.PreFilterMessage:

Impatto

Questa modifica interessa solo le app Windows Form destinate alle versioni di .NET Framework a partire da .NET Framework 4.6.1.

Per le app Windows Form destinate a versioni precedenti di .NET Framework, tali implementazioni in alcuni casi generano un'eccezione IndexOutOfRangeException quando viene chiamato il Application.FilterMessage metodo

Mitigazione

Se questa modifica è indesiderata, le app destinate a .NET Framework 4.6.1 o versione successiva possono rifiutarlo 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>

Inoltre, le app destinate a versioni precedenti di .NET Framework ma sono in esecuzione in .NET Framework 4.6.1 o versione successiva possono acconsentire esplicitamente a 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>

Vedere anche