Mitigasi: Implementasi IMessageFilter.PreFilterMessage Kustom

Di aplikasi Formulir Windows yang menargetkan versi .NET Framework yang dimulai dengan .NET Framework 4.6.1, implementasi IMessageFilter.PreFilterMessage kustom dapat dengan aman memfilter pesan saat metode Application.FilterMessage dipanggil jika implementasi IMessageFilter.PreFilterMessage:

Dampak

Perubahan ini hanya memengaruhi aplikasi Formulir Windows yang menargetkan versi .NET Framework yang dimulai dengan .NET Framework 4.6.1.

Untuk aplikasi Formulir Windows yang menargetkan versi .NET Framework sebelumnya, implementasi tersebut dalam beberapa kasus menimbulkan pengecualian IndexOutOfRangeException saat metode Application.FilterMessage dipanggil

Mitigasi

Jika perubahan ini tidak diinginkan, aplikasi yang menargetkan .NET Framework 4.6.1 atau versi yang lebih baru dapat menolaknya dengan menambahkan setelan konfigurasi berikut ke bagian <runtime bahasa umum> dari file konfigurasi aplikasi:

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

Selain itu, aplikasi yang menargetkan versi .NET Framework sebelumnya tetapi berjalan di bawah .NET Framework 4.6.1 atau versi yang lebih baru dapat ikut serta dalam perilaku ini dengan menambahkan pengaturan konfigurasi berikut ke <runtime bahasa umum> bagian dari file konfigurasi aplikasi:

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

Lihat juga