分享方式:


風險降低:自訂 IMessageFilter.PreFilterMessage 實作

在以 .NET Framework 4.6.1 和之後 .NET Framework 版本為目標的 Windows Forms 應用程式中,自訂的 IMessageFilter.PreFilterMessage 實作可以在呼叫 Application.FilterMessage 方法時安全地篩選訊息 (如果 IMessageFilter.PreFilterMessage 實作有下列狀況):

影響

這項變更只會影響以 .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>

另請參閱