Megosztás a következőn keresztül:


Megoldás: Custom IMessageFilter.PreFilterMessage implementációk

A .NET-keretrendszer a .NET-keretrendszer 4.6.1-től kezdődően megcélzott Windows Forms-alkalmazásokban az egyéni IMessageFilter.PreFilterMessage implementációk biztonságosan szűrhetik az üzeneteket a Application.FilterMessage metódus meghívásakor, ha az implementáció:IMessageFilter.PreFilterMessage

  • Az alábbiak egyikét vagy mindkettőt elvégzi:

  • És az üzeneteket a metódus meghívásával pumpálja Application.DoEvents .

Hatás

Ez a módosítás csak a .NET-keretrendszer .NET-keretrendszer 4.6.1-től kezdődően megcélzott Windows Forms-alkalmazásokat érinti.

A .NET-keretrendszer korábbi verzióit célzó Windows Forms-alkalmazások esetében az ilyen implementációk bizonyos esetekben kivételt IndexOutOfRangeException képeznek a Application.FilterMessage metódus meghívásakor

Kockázatcsökkentés

Ha ez a módosítás nem kívánatos, a .NET-keretrendszer 4.6.1-es vagy újabb verziót megcélzott alkalmazások az alkalmazás konfigurációs fájljának futtatókörnyezeti> szakaszához hozzáadva a következő konfigurációs beállítást <választhatják ki:

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

Emellett az .NET-keretrendszer korábbi verzióit célzó, de a .NET-keretrendszer 4.6.1-es vagy újabb verziójában futó alkalmazások az alábbi konfigurációs beállítás <hozzáadásával engedélyezhetik ezt a viselkedést az alkalmazás konfigurációs fájljának futtatókörnyezeti> szakaszában:

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

Lásd még