前々から発生していたクリップボードのエラー。原因は他のアプリとクリップボードの操作が競合すると発生するとのこと。発生してもキャッチできないので急に落ちちゃうんですよね。回避策が無くて困っていましたが、何気に検索してたらキャッチする方法を見つけました。この対応をしてみて様子を見てみようと思います。
発生していたエラー
このエラーです。クリップボードの操作でエラーが発生した場合、以下のエラーが発生するのですが、呼び元で例外処理を入れてもキャッチできませんでした。ハンドルされてない例外ってなってますが、ソースには例外処理を入れています。
なぜキャッチできないのか?
どうやらね、.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) {
;
}
}
おわりに
めっちゃ調べたつもりだったんですが検索キーワードが悪かったのか分かりませんでしたね。ようやく解決できるかもしれません。発生したらエラーメッセージを表示させるだけなんですけどね。今はまだキャッチできるか未確認なんで確認できたら更新します。
コメント