Bagikan melalui


Mitigasi: Implementasi Kustom dari IMessageFilter.PreFilterMessage

Di aplikasi Windows Forms yang menargetkan versi .NET Framework mulai dari .NET Framework 4.6.1, implementasi kustom IMessageFilter.PreFilterMessage dapat memfilter pesan dengan aman ketika metode Application.FilterMessage dipanggil jika implementasi IMessageFilter.PreFilterMessage terjadi:

Dampak

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

Untuk aplikasi Windows Forms yang menargetkan versi .NET Framework sebelumnya, implementasi tersebut dalam beberapa kasus akan melempar pengecualian IndexOutOfRangeException ketika 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 pengaturan konfigurasi berikut ke <bagian runtime> 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 <bagian runtime> dari file konfigurasi aplikasi:

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

Lihat juga