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

未処理例外のUnhandleExceptionイベントで

環境/言語:[Windows Xp C# .NET Framework 1.1]
分類:[.NET]

Windowsアプリで
未処理例外のUnhandleExceptionイベントが発生しないケースがあります。
10回実行して1回ぐらいしかエラー用のダイアログが表示させず
イベントも発生しない、画面があるのですが
だれか同じような現象が発生している方は、いないでしょうか。

UnhandleExceptionイベントが発生せず、画面に制御がもどり異常終了
しません。
try文を入れると例外を認識しています。
でも再throwしても、例外とはならず???

以下がソースです。
★★★ main関数にて ★★★
static void Main()
{

//Windowsフォームの未処理例外のハンドル定義
Application.ThreadException += new ThreadExceptionEventHandler(ThreadExceptionEvent);
// 未処理例外のハンドル定義
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledExceptionEvent);

//Windows XP スタイルにする
Application.EnableVisualStyles();
Application.DoEvents();
//アセンブリよりアプリケーション名を取得する
Assembly myAssembly = Assembly.GetEntryAssembly();
AssemblyName myAssemblyName = myAssembly.GetName();
String myAppName = myAssemblyName.Name;
//二重起動を防止する
Mutex myMutex = new Mutex(false,myAppName);
if (myMutex.WaitOne(0,false))
{
// アプリケーションの起動
Application.Run(new frmMenu());
// Mutexを解放
myMutex.ReleaseMutex();
}
myMutex.Close();
}

private static void UnhandledExceptionEvent(object sender, UnhandledExceptionEventArgs e )
{
string msg = "以下の内容を管理者へ連絡して下さい。";
msg += Environment.NewLine;
msg += Environment.NewLine;
msg += ((Exception)e.ExceptionObject).ToString();
// 子例外の編集
Exception inner = ((Exception)e.ExceptionObject).InnerException;
while(inner != null)
{
// メッセージの編集
msg += Environment.NewLine;
msg += inner.ToString();
inner = inner.InnerException;
}

MessageBox.Show(msg,"システム例外");
// アプリケーション終了
Application.Exit();
}

★★ frmNyukin該当画面でビジネスDLL呼び出し ★★
→インプットマン使用
private void fncKey_FunctionKeyPress(object sender, GrapeCity.Win.Input.FunctionKeyPressEventArgs e)
{
//マウスポインタ 待機中(砂時計)
this.Cursor=Cursors.WaitCursor;

//確認(F4)
if (e.Key.Equals(ButtonKeys.F4))
{
//選択患者のデータ抽出
this.Get_spdList(this.spdList_Sheet.ActiveRowIndex);
//ファンクションキーの設定
InputManUtility.FuncKeySetActive(this.fncKey,"fncKeySet2");
}
//実行(F5)
else if(e.Key.Equals(ButtonKeys.F5))
{
//患者テーブル ロック
if ( KanjaT_Lock() )
{
//患者データ作成
NyuKinIchiranView nyukind = NyukinData_Make();
NyuKinBusiness nyukinb = new NyuKinBusiness();

//修正
nyukinb.Update(nyukind); → このビジネスで例外が発生し                           この箇所にtry文を入れればcatchできるのですが
                再throwしてもイベントは発生せず!!

//更新完了メッセージ
MsgBox.MsgOkUpdate();


★★ ビジネスDLL ★★
public void Update(NyuKinIchiranView niv)
{
try
{
// 入院一覧データのチェック
if(niv.ToKaikeiBi == null || niv.ToKaikeiBi == "")
{
throw new ExecuteException("変更先の会計日が未設定です");
→Exceptionクラスを継承した、自作の例外
}
if(niv.ToRyosyuBi == null || niv.ToRyosyuBi == "")
{
throw new ExecuteException("変更先の領収日が未設定です");
}
   ・
   ・
catch(Exception e)
// 登録時にエラーが発生した場合
{
// トランザクションロールバック
this._txn.Rollback();
// ExecuteExceptionでシステムエラー
throw new ExecuteException(e);
}
ニュースグループを調べてみると、Windowsフォームアプリケーションの場合は、Application.ThreadExceptionを使った方がよいようです。

.NET 247 : AppDomain.UnhandledException on microsoft.public.dotnet.general
http://www.dotnet247.com/247reference/msgs/11/56026.aspx

.NET 247 : Exception Handling + Winforms on microsoft.public.dotnet.languages.csharp
http://www.dotnet247.com/247reference/msgs/39/195326.aspx

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