- PR -

Try Catch文とThrowについて

投稿者投稿内容
ジン
常連さん
会議室デビュー日: 2008/07/22
投稿数: 33
投稿日時: 2008-09-12 10:29
追記:
エラーの経路は「ex.StackTrace」で取得しようと思いました。
このようにすれば、各メソッドで「成功」、「失敗」などの情報を
返す必要はなくなりますよね?

とても無駄な処理を行おうとしていたことを反省しています。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2008-09-12 10:45
引用:

ジンさんの書き込み (2008-09-12 10:12) より:

>参考:NAL-6295の舌先三寸「むやみにキャッチしないでね。ゴールキーパー以外はハンドで反則ですよ。」
>http://d.hatena.ne.jp/NAL-6295/20050909/p1
またご紹介頂いたページに関する質問で申し訳ないのですが、
Appication_Errorで一元管理するということですが、
この「Appication_Error」とは何を指しているのでしょうか?


Windows Form のアプリケーションならこっちじゃないかな
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.application.threadexception(VS.80).aspx
_________________
かるあ のメモスニペット
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-09-12 11:33
引用:

ジンさんの書き込み (2008-09-12 10:12) より:

またご紹介頂いたページに関する質問で申し訳ないのですが、

Appication_Errorで一元管理するということですが、この「Appication_Error」とは何を指しているのでしょうか?


Web アプリケーションなので書く必要もないかもしれませんが、"Application_Error" という正しいスペルで検索すれば疑問が解決するのではないでしょうか。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
まさる
ベテラン
会議室デビュー日: 2006/12/21
投稿数: 59
お住まい・勤務地: 越後の中ほど
投稿日時: 2008-09-12 11:38
引用:

ジンさんの書き込み (2008-09-12 10:12) より:
>参考:NAL-6295の舌先三寸「むやみにキャッチしないでね。ゴールキーパー以外はハンドで反則ですよ。」
>http://d.hatena.ne.jp/NAL-6295/20050909/p1
またご紹介頂いたページに関する質問で申し訳ないのですが、
Appication_Errorで一元管理するということですが、
この「Appication_Error」とは何を指しているのでしょうか?
「MyApplication」クラスのことではないですよね?
私はWindowsアプリケーションを作成しています。
検索して、以下のページなども見たのですが、うまく理解できませんでした。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?mode=viewtopic&topic=25373&forum=7
もしよろしければ、教えて頂けませんか?



すでにかるあさんが補足されていますが、WindowsアプリケーションではApplication.ThreadExceptionイベントを使用します。

MSDN Libraryの記述が分かりにくいようなら、ジンさんが提示されたリンク先のスレッドで紹介されている、

 ・.NET TIPS「適切に処理されなかった例外をキャッチするには?」
 ・菊池 Blog「今週のクラス System.Exception」

が参考になるかと思います。
ジン
常連さん
会議室デビュー日: 2008/07/22
投稿数: 33
投稿日時: 2008-09-12 13:11
皆様ご回答ありがとうございます。
随分理解できてきた気がします。

引用:

じゃんぬねっとさんの書き込み (2008-09-12 11:33) より:
Web アプリケーションなので書く必要もないかもしれませんが、"Application_Error" という正しいスペルで検索すれば疑問が解決するのではないでしょうか。


正しく検索できました。
ありがとうございます。
Web アプリケーションを開発する際には、参考にさせて頂きます。


引用:

かるあさんの書き込み (2008-09-12 10:45) より:
Windows Form のアプリケーションならこっちじゃないかな
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.application.threadexception(VS.80).aspx



引用:

まさるさんの書き込み (2008-09-12 11:38) より:
MSDN Libraryの記述が分かりにくいようなら、ジンさんが提示されたリンク先のスレッドで紹介されている、

 ・.NET TIPS「適切に処理されなかった例外をキャッチするには?」
 ・菊池 Blog「今週のクラス System.Exception」

が参考になるかと思います。


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

上記のページが分かりやすいと思いましたので、
このページを元に、簡単なサンプルを作ってみました。
例外をキャッチしている様子は、再現できたのですが、
2点ほど理解できない点がありました。
また質問させて下さい。


(1)例外のイベントは取得できたが、例外が残るため
.NET Framework標準のエラー・ダイアログが表示されてしまう。
どこでどのように例外をクリアしてあげたら良いのでしょうか?


(2)例では、Sub Mainから起動させているが
プロジェクトのプロパティで「アプリケーションフレームワークを有効にする」
にチェックを入れると、Sub Mainから起動できません。
この場合、MyApplicationからSub Mainを呼べばいいのかと思ったのですが、
そうすると画面終了後に、再度画面が起動してしまいます。
どのように制御したら良いのでしょうか?


たびたび申し訳ございませんが、よろしくお願いいたします。
長くなりましたので、私が作成したソースは次に記載させて頂きます。
ジン
常連さん
会議室デビュー日: 2008/07/22
投稿数: 33
投稿日時: 2008-09-12 13:12
プログラムを張り付けただけで、
分かりづらい記述であると思いましたので、削除致しました。
ご了承ください。

[ メッセージ編集済み 編集者: ジン 編集日時 2008-09-12 16:51 ]
ジン
常連さん
会議室デビュー日: 2008/07/22
投稿数: 33
投稿日時: 2008-09-12 16:49
自己レス

私の(2)の質問は、
Thread.GetDomain().UnhandledExceptionでハンドルすることで
解決できますね。
@IT:.NET TIPS 適切に処理されなかった例外をキャッチするには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/320appexception/appexception.html
上記の記事を繰り返し読むことで理解できました。


今週のクラス System.Exception
http://www.ailight.jp/blog/kazuk/articles/6298.aspx
初めは難しいと思ったのですが、この記事も複数回読むことで理解できてきました。
とても参考になりました。
ありがとうございます。



(1)は未だに解決できておりません。
Thread.GetDomain().UnhandledExceptionでは、
例外をハンドルしてエラーメッセージを表示しているだけなので、
例外が処理されていたいため、エラーダイアログが表示されてしまうということは
理解できています。

うまく説明できないのですが、
このようなメッセージを表示したくないと思っているのです。
http://www.atmarkit.co.jp/fdotnet/dotnettips/320appexception/appexception_01.gif


また、上に私が記載したプログラムは大変分かりづらいと思いますので、
削除させて頂こうと思います。


もしよろしければ(1)へのご回答お願いいたします。
サンジ
会議室デビュー日: 2008/09/14
投稿数: 12
投稿日時: 2008-09-14 12:17
ジンさん、はじめまして。
私は以下のようにプログラムしています。
まだまだ未熟者ですが、参考になれば幸いです。


引用:

ジンさんの書き込み (2008-09-12 13:11) より:
(1)例外のイベントは取得できたが、例外が残るため
.NET Framework標準のエラー・ダイアログが表示されてしまう。
どこでどのように例外をクリアしてあげたら良いのでしょうか?


予測できない例外が発生したら、アプリケーションを終了しましょう。
正しい動きをしていないのですから。


引用:

ジンさんの書き込み (2008-09-12 13:11) より:
(2)例では、Sub Mainから起動させているが
プロジェクトのプロパティで「アプリケーションフレームワークを有効にする」
にチェックを入れると、Sub Mainから起動できません。
この場合、MyApplicationからSub Mainを呼べばいいのかと思ったのですが、
そうすると画面終了後に、再度画面が起動してしまいます。
どのように制御したら良いのでしょうか?


こちらが参考になると思います。
http://dobon.net/vb/dotnet/programing/unhandledexception.html
My.Application.UnhandledExceptionイベントを使用する方法が書かれています。



便乗して質問させて下さい。
私も似たような件で悩んでおりまして、
既に作成したクラスをどうしようかと考えています。
大量のリソースがあるのですが、すべて戻り値で結果を返しています。
予期せぬ例外が発生したら、「失敗」という意味の戻り値を返しているのです。
すべての修正するのは、とても大変なので、どうしようかと悩んでいます。

現在は、「失敗」が返されてきたら、独自の例外をスローしようかと考えています。
このようなプログラミング設計には問題ありますか?

もし宜しければご意見頂けますととても嬉しいです。
宜しくお願い致します。

スキルアップ/キャリアアップ(JOB@IT)