風險降低:自訂 IMessageFilter.PreFilterMessage 實作
在以 .NET Framework 4.6.1 和之後 .NET Framework 版本為目標的 Windows Forms 應用程式中,自訂的 IMessageFilter.PreFilterMessage 實作可以在呼叫 Application.FilterMessage 方法時安全地篩選訊息 (如果 IMessageFilter.PreFilterMessage 實作有下列狀況):
則會執行下列其中一項或兩項:
呼叫 AddMessageFilter 方法來加入訊息篩選器。
呼叫 RemoveMessageFilter 方法來移除訊息篩選器。 方法。
並且呼叫 Application.DoEvents 方法來激發訊息。
影響
這項變更只會影響以 .NET Framework 4.6.1 和更新版本為目標的 Windows Forms 應用程式。
針對以舊版 .NET Framework 為目標的 Windows Forms 應用程式,在某些情況下這類實作會在呼叫 Application.FilterMessage 方法時擲回 IndexOutOfRangeException 例外狀況
風險降低
如果這不是您要的變更,則以 .NET Framework 4.6.1 或更新版本為目標之應用程式可以藉由將下列組態設定新增至應用程式組態檔的<執行階段> 區段,來選擇退出這項行為:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.DontSupportReentrantFilterMessage=true" />
</runtime>
此外,以舊版 .NET Framework 為目標,但在 .NET Framework 4.6.1 或更新版本下執行的應用程式,可以藉由將下列組態設定新增至應用程式組態檔的<執行階段> 區段,來選擇加入這項行為:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.DontSupportReentrantFilterMessage=false" />
</runtime>