Freigeben über


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:

  • Führt eine oder beide der folgenden Aktionen aus:

    • Fügt einen Nachrichtenfilter hinzu, indem die AddMessageFilter Methode aufgerufen wird.

    • Entfernt einen Nachrichtenfilter durch Aufrufen der RemoveMessageFilter Methode. Methode.

  • Und Nachrichten durch Aufrufen der Application.DoEvents-Methode abruft.

Auswirkung

Diese Änderung wirkt sich nur auf Windows Forms-Apps aus, die auf Versionen von .NET Framework ab .NET Framework 4.6.1 abzielen.

Bei Windows Forms-Apps, die auf frühere Versionen von .NET Framework abzielen, lösen solche Implementierungen in einigen Fällen eine IndexOutOfRangeException Ausnahme aus, wenn die Application.FilterMessage Methode aufgerufen wird.

Abschwächung

Wenn diese Änderung nicht erwünscht ist, können Apps, die auf .NET Framework 4.6.1 oder eine höhere Version abzielen, dies deaktivieren, indem sie die folgende Konfigurationseinstellung zum <Laufzeitabschnitt> der Konfigurationsdatei der App hinzufügen:

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

Darüber hinaus können Apps, die auf frühere Versionen von .NET Framework abzielen, aber unter .NET Framework 4.6.1 oder höher ausgeführt werden, sich für dieses Verhalten entscheiden, indem sie die folgende Konfigurationseinstellung zum <Laufzeitabschnitt> der Konfigurationsdatei der App hinzufügen:

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

Siehe auch