Zmírnění: Vlastní implementace IMessageFilter.PreFilterMessage
V model Windows Forms aplikacích, které cílí na verze rozhraní .NET Framework počínaje rozhraním .NET Framework 4.6.1, může vlastní IMessageFilter.PreFilterMessage implementace bezpečně filtrovat zprávy, pokud Application.FilterMessage je volána metoda, pokud implementaceIMessageFilter.PreFilterMessage:
Provede jednu nebo obě z následujících možností:
Přidá filtr zpráv voláním AddMessageFilter metody.
Odebere filtr zpráv voláním RemoveMessageFilter metody. Metoda.
A pumpuje zprávy voláním Application.DoEvents metody.
Dopad
Tato změna má vliv pouze na model Windows Forms aplikace, které cílí na verze rozhraní .NET Framework počínaje rozhraním .NET Framework 4.6.1.
Pro model Windows Forms aplikace, které cílí na předchozí verze rozhraní .NET Framework, takové implementace v některých případech vyvolá IndexOutOfRangeException výjimku při Application.FilterMessage zavolání metody
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>