Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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:
Apakah salah satu atau kedua hal berikut ini:
Menambahkan filter pesan dengan memanggil AddMessageFilter metode .
Menghapus filter pesan dengan memanggil RemoveMessageFilter metode . Metode.
Dan memompa pesan dengan memanggil Application.DoEvents metode .
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>