Delen via


Risicobeperking: Aangepaste implementaties van IMessageFilter.PreFilterMessage

In Windows Forms-apps die gericht zijn op versies van .NET Framework die beginnen met .NET Framework 4.6.1, kan een aangepaste IMessageFilter.PreFilterMessage implementatie berichten veilig filteren wanneer de Application.FilterMessage methode wordt aangeroepen als de IMessageFilter.PreFilterMessage implementatie:

  • Voert een of beide van de volgende handelingen uit:

    • Hiermee voegt u een berichtfilter toe door de methode aan te AddMessageFilter roepen.

    • Hiermee verwijdert u een berichtfilter door de methode aan te RemoveMessageFilter roepen. Methode.

  • En pompen berichten door de Application.DoEvents methode aan te roepen.

Impact

Deze wijziging is alleen van invloed op Windows Forms-apps die gericht zijn op versies van .NET Framework vanaf .NET Framework 4.6.1.

Voor Windows Forms-apps die gericht zijn op eerdere versies van .NET Framework, genereren dergelijke implementaties in sommige gevallen een IndexOutOfRangeException uitzondering wanneer de Application.FilterMessage methode wordt aangeroepen

Oplossing

Als deze wijziging ongewenst is, kunnen apps die gericht zijn op .NET Framework 4.6.1 of een latere versie, zich afmelden door de volgende configuratie-instelling toe te voegen aan de <runtimesectie> van het configuratiebestand van de app:

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

Bovendien kunnen apps die gericht zijn op eerdere versies van .NET Framework, maar worden uitgevoerd onder .NET Framework 4.6.1 of een latere versie, zich voor dit gedrag aanmelden door de volgende configuratie-instelling toe te voegen aan de <runtimesectie> van het configuratiebestand van de app:

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

Zie ook