WindowsFormsでC#を使ってアプリケーションを作成しています
その中で例外が出た場合でも無視する箇所があるのですが、実際に例外が発生すると
アプリケーションが数秒の間動作しなくなります。
できれば例外が発生したあとすぐ次の処理を行いたいのですが、どうにかならないでしょうか
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
0
できれば例外が発生したあとすぐ次の処理を行いたいのですが、どうにかならないでしょうか
どうにかする以前に、例外を無視するとか自分的にはあり得ないのですが。例外処置について全体的に見直した方が良いのではないかと思います。
直接の答えにはなってないかもしれませんが、例外処置について、自分的に一般的と思うことを書きます。
(1) 予測可能で正しい業務フローに戻すことができる「業務エラー」(例:ユーザーの入力間違い)と、予測できないもしくは予測はできても何の対応もできない「例外」(例:DB サーバーダウン)を区別して対処。
(2) 「例外」はランタイムに拾わせてアプリケーションを停止させる。
(3) よほどのことがない限り try-catch は書かない。
(4) キャッチせざるを得ない場合でも Execption はキャッチしない。
(5) 間違って補足してしまった例外は throw する。(注:catch ブロックでキャッチした例外を throw するとスタックトレースが途切れるので単に throw と書く)
(6) ユーザーへの通知が必要なら、集約的例外処置を利用する。
詳しくは以下の記事を見てください。
NETの例外処理 Part.1
https://blogs.msdn.microsoft.com/nakama/2008/12/29/net-part-1/
.NETの例外処理 Part.2
https://blogs.msdn.microsoft.com/nakama/2009/01/02/net-part-2/
あと、.NET 4 からは破損状態例外は catch できなくなっているそうですが、「それでも Catch (Exception e) を使用するのはよくない」ということについては以下の記事を見てください。
破損状態例外を処理する
https://msdn.microsoft.com/ja-jp/magazine/dd419661.aspx
投稿2018/10/09 09:41

退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

退会済みユーザー
2018/10/10 00:25

退会済みユーザー
2018/10/10 00:47

0
ベストアンサー
仮にその「例外」がネットワーク関連の場合、タイムアウトまで待ち時間が発生することは往々にしてあります。その場合はそもそも例外が発生するまで時間がかかるので、例外発生後すぐ次の処理をしていたとしても、アプリケーションが数秒の間動作しなくなる状況は改善されるはずもありません。
まず、どんな例外が発生した時に時間がかかっているのか確認しましょう。
投稿2018/10/09 09:28
総合スコア13707
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

退会済みユーザー
2018/10/10 00:21

0
C# の例外は原則としてログを吐いて終了するときぐらいしか使いません。
と言うか使えません。
アプリケーションを終了させない場合には入力検証を実装します。
Windows フォームでのユーザー入力の検証
投稿2018/10/09 09:16
総合スコア4152
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。