從 .NET Framework 4.6.1 開始為目標的 .NET Framework 版本的 Windows Forms 應用程式中,若在呼叫IMessageFilter.PreFilterMessage方法時自定義Application.FilterMessage實作,則可安全地篩選訊息:
執行下列其中一項或兩項動作:
藉由呼叫 AddMessageFilter 方法加入訊息篩選。
藉由呼叫 RemoveMessageFilter 方法來移除訊息篩選。 方法。
並 藉由呼叫 Application.DoEvents 方法來提取訊息。
影響
此變更只會影響將 Windows Forms 應用程式 目標設為從 .NET Framework 4.6.1 開始的版本。
針對以舊版 .NET Framework 為目標的 Windows Forms 應用程式,在某些情況下,這類實作在呼叫 IndexOutOfRangeException 方法時會擲回 Application.FilterMessage 例外狀況。
緩和措施
如果這項變更不理想,以 .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>