DOBON.NET DOBON.NETプログラミング掲示板過去ログ

コンソールアプリケーションのエラー処理について(処理を途中で止めたくない)

環境/言語:[.NET Framework2.0/Console Application/]
分類:[.NET]

こんにちは。アべです。

.NET Framework2.0
でコンソールアプリケーション
を作成しております。

そこで致命的エラーが発生すると
「問題が発生したため、ConsoleApplication1 を終了します。
ご不便をおかけして申し訳ありません。」
というエラーダイアログが出てアプリケーションが停止してしまいます。

アプリケーションは、一連のタスク処理の一つなので、
止まらないようにしたいのですが、何か対応する方法はあるのでしょうか?

通常であれば、try{}catch{}を組み込むべきなのでしょうが、
OutOfMemoryやマルチスレッドの例外だとうまくいかないので
どんなときでも、止まらないようにしたいと考えております。

---ソース---------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
throw new SystemException("ok");

}
}
}
>■No23154に返信(きよさんの記事)
>

Application.ThreadExceptionを使用してみたらいかがですか

適切に処理されなかった例外をキャッチするには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/320appexception/appexception.html

UnhandledException
http://blog.livedoor.jp/gushwell/archives/2005-05.html
> 通常であれば、try{}catch{}を組み込むべきなのでしょうが、
> OutOfMemoryやマルチスレッドの例外だとうまくいかないので
> どんなときでも、止まらないようにしたいと考えております。
その考えは辞めるべきです。
例外は適切に処理できるものと、適切に処理できないものがあります。

例えば、OutOfMemoryExceptionやStackOverflowExceptionが起きたとしてその続きを処理できるんでしょうか?
できたとしてユーザにエラーを提示して、処理を終了するぐらいかと思います。

-----
> Application.ThreadExceptionを使用してみたらいかがですか
コンソールアプリケーションではNGです。
ThreadExceptionイベントはApplication.Runの実行中に発生したもののみフォローします。
引用されている記事にも説明がありますのでご確認ください。
(ThreadExceptionと後者に書かれているUnhandledExceptionの取り違えかもしれませんが…)

ということで、コンソールアプリケーションではAppDomainクラスのUnhandledExceptionとなります。

DOBON.NET | プログラミング道 | プログラミング掲示板