Środki zaradcze: Niestandardowe implementacje IMessageFilter.PreFilterMessage

W aplikacjach Windows Forms przeznaczonych dla wersji programu .NET Framework, począwszy od programu .NET Framework 4.6.1, implementacja niestandardowa IMessageFilter.PreFilterMessage może bezpiecznie filtrować komunikaty, gdy metoda jest wywoływana, Application.FilterMessage jeśli implementacja IMessageFilter.PreFilterMessage :

Wpływ

Ta zmiana dotyczy tylko aplikacji Windows Forms przeznaczonych dla wersji programu .NET Framework, począwszy od programu .NET Framework 4.6.1.

W przypadku aplikacji Windows Forms przeznaczonych dla poprzednich wersji programu .NET Framework takie implementacje w niektórych przypadkach zgłaszają IndexOutOfRangeException wyjątek, gdy metoda jest wywoływana Application.FilterMessage

Czynności zapobiegawcze

Jeśli ta zmiana jest niepożądane, aplikacje przeznaczone dla programu .NET Framework 4.6.1 lub nowszej wersji mogą zrezygnować z niej, dodając następujące ustawienie konfiguracji do <sekcji środowiska uruchomieniowego> pliku konfiguracji aplikacji:

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

Ponadto aplikacje przeznaczone dla poprzednich wersji programu .NET Framework, ale działają w programie .NET Framework 4.6.1 lub nowszej wersji, mogą zdecydować się na to zachowanie, dodając następujące ustawienie konfiguracji do <sekcji środowiska uruchomieniowego> pliku konfiguracji aplikacji:

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

Zobacz też