共用方式為


緩解措施:自定義 IMessageFilter.PreFilterMessage 實作

從 .NET Framework 4.6.1 開始為目標的 .NET Framework 版本的 Windows Forms 應用程式中,若在呼叫IMessageFilter.PreFilterMessage方法時自定義Application.FilterMessage實作,則可安全地篩選訊息:

影響

此變更只會影響將 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>

另請參閱