Sdílet prostřednictvím


Zmírnění: Vlastní implementace IMessageFilter.PreFilterMessage

V aplikacích Windows Forms, které cílí na verze rozhraní .NET Framework počínaje verzí 4.6.1, může vlastní IMessageFilter.PreFilterMessage implementace bezpečně filtrovat zprávy, když je volána metoda Application.FilterMessage, pokud implementace IMessageFilter.PreFilterMessage.

Dopad

Tato změna má vliv pouze na aplikace Windows Forms, které cílí na verze rozhraní .NET Framework počínaje rozhraním .NET Framework 4.6.1.

U aplikací Windows Forms, které cílí na předchozí verze rozhraní .NET Framework, takové implementace v některých případech vyvolají IndexOutOfRangeException výjimku, když je metoda Application.FilterMessage zavolána.

Zmírnění

Pokud je tato změna nežádoucí, můžou se aplikace, které cílí na rozhraní .NET Framework 4.6.1 nebo novější verzi, odhlásit přidáním následujícího nastavení konfigurace do <oddílu runtime> konfiguračního souboru aplikace:

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

Kromě toho se aplikace, které cílí na předchozí verze rozhraní .NET Framework, ale běží v rozhraní .NET Framework 4.6.1 nebo novější verzi, můžou k tomuto chování přihlásit přidáním následujícího nastavení konfigurace do <části runtime> konfiguračního souboru aplikace:

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

Viz také