OITA: Oika's Information Technological Activities

@oika 情報技術的活動日誌。

C# Clipboardクラスでクリップボードを監視するとSEHExceptionも発生する

前に「[C#]Clipboardクラスでクリップボードを監視するとComExceptionが発生する」って書いたんだけど、
ComExceptionを無視するようにして安心したのもつかの間、
今度はSEHExceptionってのが発生してきやがった@Windows 8.1(32bit)。

いまいち発生条件が特定できなかったけれど、
ソースでの発生箇所は前と同じ、クリップボードの内容を監視するために
短い周期でClipboard.GetText()をやっている部分だ。

そんで上のリンクのMSDNの説明を見てみたところ、
例外の項に「ExternalException」ってのがある。

クリップボードをクリアできませんでした。 この例外は、通常、クリップボードが別のプロセスで使用されている場合に発生します。

ExternalExceptionはSEHExceptionの上位クラスなので、
たぶんこれのことかなぁという感じ。

結局対処としては、ComExceptionと同様、
SEHExceptionもキャッチしてそのまま握りつぶすことにした。
他プロセスでクリップボード使ってるときは監視ターンを1回とばすってことで。

しかしあれだな、どうもクリップボードの変更をこうやって監視するの自体が
あんまり好ましくないのかなという印象。
流儀にそった別の方法があるんだろうか。

そんなわけで、修正をいれました↓こちらのツールもよろしければどうぞ。
快速コード・ジェネレータ「ぺたこーだ」公開