軽減策:カスタムの IMessageFilter.PreFilterMessage 実装
.NET Framework の .NET Framework 4.6.1 以降のバージョンを対象とする Windows フォーム アプリでは、Application.FilterMessage メソッドが呼び出されると、カスタムの IMessageFilter.PreFilterMessage 実装は IMessageFilter.PreFilterMessage 実装が次のような場合に、メッセージを安全にフィルター処理できます。
次の操作のいずれか、または両方を行う場合:
AddMessageFilter メソッドを呼び出してメッセージ フィルターを追加する。
RemoveMessageFilter メソッドを呼び出してメッセージ フィルターを削除する。 メソッドをオーバーライドします。
なおかつ、Application.DoEvents メソッドを呼び出してメッセージをポンプする場合。
影響
この変更によって影響を受けるのは、.NET Framework の .NET Framework 4.6.1 以降のバージョンを対象とする Windows フォーム アプリのみです。
.NET Framework の以前のバージョンを対象とする Windows フォーム アプリの場合、このような実装で、Application.FilterMessage メソッドが呼び出されると IndexOutOfRangeException 例外がスローされることがあります。
軽減策
この変更が望ましくない場合は、.NET Framework 4.6.1 以降のバージョンを対象とするアプリでこの変更を無効にできます。これは、そのアプリの構成ファイルの <runtime> セクションに次の構成設定を追加して行います。
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.DontSupportReentrantFilterMessage=true" />
</runtime>
また、以前のバージョンの .NET Framework を対象とするものの、.NET Framework 4.6.1 以降のバージョンで実行されているアプリでは、そのアプリの構成ファイルの <runtime> セクションに構成設定を追加して、この動作を有効にすることができます。
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.DontSupportReentrantFilterMessage=false" />
</runtime>
関連項目
.NET