前に「[C#]Clipboardクラスでクリップボードを監視するとComExceptionが発生する」って書いたんだけど、
ComExceptionを無視するようにして安心したのもつかの間、
今度はSEHExceptionってのが発生してきやがった@Windows 8.1(32bit)。
いまいち発生条件が特定できなかったけれど、
ソースでの発生箇所は前と同じ、クリップボードの内容を監視するために
短い周期でClipboard.GetText()をやっている部分だ。
そんで上のリンクのMSDNの説明を見てみたところ、
例外の項に「ExternalException」ってのがある。
クリップボードをクリアできませんでした。 この例外は、通常、クリップボードが別のプロセスで使用されている場合に発生します。
ExternalExceptionはSEHExceptionの上位クラスなので、
たぶんこれのことかなぁという感じ。
結局対処としては、ComExceptionと同様、
SEHExceptionもキャッチしてそのまま握りつぶすことにした。
他プロセスでクリップボード使ってるときは監視ターンを1回とばすってことで。
しかしあれだな、どうもクリップボードの変更をこうやって監視するの自体が
あんまり好ましくないのかなという印象。
流儀にそった別の方法があるんだろうか。
そんなわけで、修正をいれました↓こちらのツールもよろしければどうぞ。
快速コード・ジェネレータ「ぺたこーだ」公開