Entschärfung: Benutzerdefinierte IMessageFilter.PreFilterMessage-Implementierungen
In Windows Forms-Apps für .NET Framework-Versionen ab .NET Framework 4.6.1 kann eine benutzerdefinierte IMessageFilter.PreFilterMessage-Implementierung Meldungen beim Aufrufen der Methode Application.FilterMessage sicher filtern, wenn die IMessageFilter.PreFilterMessage-Implementierung:
Mindestens eine der folgenden Aktionen ausführt:
Hinzufügen eines Meldungsfilters durch Aufrufen der AddMessageFilter-Methode.
Entfernen eines Meldungsfilters durch Aufrufen der RemoveMessageFilter-Methode. -Methode.
Und Nachrichten durch Aufrufen der Application.DoEvents-Methode abruft.
Auswirkungen
Diese Änderung betrifft nur Windows Forms-Apps, die auf Versionen von .NET Framework ab .NET Framework 4.6.1 ausgerichtet sind.
Für Windows Forms-Apps, die auf vorherige Versionen von .NET Framework ausgerichtet sind, lösen solche Implementierungen in einigen Fällen beim Aufrufen der Application.FilterMessage-Methode eine IndexOutOfRangeException-Ausnahme aus.
Minderung
Ist diese Änderung nicht erwünscht, kann sie für Apps, die für .NET Framework 4.6.1 oder höhere Versionen vorgesehen sind, deaktiviert werden. Dazu muss dem Abschnitt <runtime> der App-Konfigurationsdatei die folgende Konfigurationseinstellung hinzugefügt werden:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.DontSupportReentrantFilterMessage=true" />
</runtime>
Für Apps, die für frühere Versionen von .NET Framework vorgesehen sind, aber unter .NET Framework 4.6.1 oder einer höheren Version ausgeführt werden, kann dieses Verhalten aktiviert werden, indem dem Abschnitt <runtime> der App-Konfigurationsdatei die folgende Konfigurationseinstellung hinzugefügt wird:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.DontSupportReentrantFilterMessage=false" />
</runtime>