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:

  • 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>

Siehe auch