クリップボードのエラーがようやく解決できるかも

この記事は約2分で読めます。

前々から発生していたクリップボードのエラー。原因は他のアプリとクリップボードの操作が競合すると発生するとのこと。発生してもキャッチできないので急に落ちちゃうんですよね。回避策が無くて困っていましたが、何気に検索してたらキャッチする方法を見つけました。この対応をしてみて様子を見てみようと思います。

発生していたエラー

このエラーです。クリップボードの操作でエラーが発生した場合、以下のエラーが発生するのですが、呼び元で例外処理を入れてもキャッチできませんでした。ハンドルされてない例外ってなってますが、ソースには例外処理を入れています。

なぜキャッチできないのか?

どうやらね、.NET Framework 4 からアクセス違反などの破損状態の例外エラーをキャッチしないようになったみたいです。ようはそんな状態でアプリ実行を継続するなんて危険極まりない!落としまーす!ってことらしいです。いや、言いたいことはわかるんですが、せめて編集中のファイルは保存させて頂いても良いかと。

キャッチする方法

.NET Framework 4 でもキャッチするには App.config に legacyCorruptedStateExceptionsPolicy を追加するか、対象のメソッドに HandleProcessCorruptedStateExceptions 属性を適用します。

App.Configを設定する方法

<configuration>
<runtime>
    <legacyCorruptedStateExceptionsPolicy enabled="true" />
</runtime>
</configuration>

対象のメソッドに HandleProcessCorruptedStateExceptions 属性を適用する方法

[HandleProcessCorruptedStateExceptions]
public void syori() {
    try {
        // 処理
    } catch (AccessViolationException avx) {
        ;
    }
}

おわりに

めっちゃ調べたつもりだったんですが検索キーワードが悪かったのか分かりませんでしたね。ようやく解決できるかもしれません。発生したらエラーメッセージを表示させるだけなんですけどね。今はまだキャッチできるか未確認なんで確認できたら更新します。

コメント

タイトルとURLをコピーしました