Ś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 :
Wykonuje jedną lub obie z następujących czynności:
Dodaje filtr komunikatów przez wywołanie AddMessageFilter metody .
Usuwa filtr komunikatów przez wywołanie RemoveMessageFilter metody . Metoda.
I pompuje komunikaty, wywołując metodę Application.DoEvents .
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>