- - PR -
NotifyIconでのバルーン表示について
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-04-03 13:31
状況が詳しくなく申し訳ありません。 下記の通りコードを書いています。(省略している部分もあります) デバッグすると、 Application_UnhandledException()は、バルーン表示してそのまま抜けます。 その後、テストでThrowしている、throw new Exception のところで、 "Exceptionがハンドルされません"となっています。 タイマー停止しているのですが、何故かインターバル毎に毎回同じエラーが 出ています。 ---------------------------------------------------------------------- #OrignalTimer.cs // タイマーイベント private TimerMethod(object state) { Timer.Change(Timeout.Infinte, Timeout.Infinte); throw new Exception("Exception 発生"); ← ここでApplication_UnhandledExceptionが処理された後にエラーとなり選択されています。 } #program.cs [STAThread] static void Main(string[] args) { Thread.GetDomain().UnhandledException += new UnhandledExceptionEventHandler(Application_UnhandledException); Application.Run(new Form1); } public static void Application_UnhandledException(onject sender, UnhandledExceptionEventArgs e) { ((Form1)Application.OpenFiles["Form1"]).notifyIcon.Visible=true; ((Form1)Application.OpenFiles["Form1"]).notifyIcon.BalloonTipText = "XX"; ((Form1)Application.OpenFiles["Form1"]).notifyIcon.BalloonTipTitle = "YYY"; ((Form1)Application.OpenFiles["Form1"]).notifyIcon.BalloonTipIcon =ToolTipIcon.Error; ((Form1)Application.OpenFiles["Form1"]).notifyIcon.ShowBalloonTip(1000); } ※Form1.NotifyIconのModifiersは、Publicにしています。 --------------------------------------------------------------------------- | ||||||||||||
|
投稿日時: 2009-04-03 13:38
あら・・・じゃぁやっぱり
が抜けてるだけですね。 Application_UnhandledExceptionに上記追加したら万事解決しませんか? それとは別に、記載のロジックはあまり好きではないです・・・ 何が起きてもバルーン出して終わりってのはどうも・・・ | ||||||||||||
|
投稿日時: 2009-04-03 13:57
見落としてました。 こっちは、インターバルが短くて、 タイマー停止前にスレッドプールに溜まったものが実行されてるだけとか無いですか? | ||||||||||||
|
投稿日時: 2009-04-03 13:59
ありがとうございます。
イベントの引数にある、UnhandledExceptionEventArgs e に、ExitApplicationが 存在しないです。 C#の場合はまた違う方法なのでしょうか・・・ Frameworkは2.0でも大丈夫みたいなので。
実際にはエラーログの出力は行う予定です。 本当は例外エラー出たら終了させたいのですが、継続させようとしています。 | ||||||||||||
|
投稿日時: 2009-04-03 14:03
まず最初に停止しているので問題ないと思うのですが。 ただ、ずっと同じところが実行されているので、停止ができてないとかですかね? ※インターバルは10秒にしています。 | ||||||||||||
|
投稿日時: 2009-04-03 14:20
おっと。C#でしたね。
たしかにVBでは、My.Application.UnhandledExceptionイベントを使いますが、 今回はAppDomain.UnhandledExceptionをつかっているのでしたね。 Application.ThreadExceptionイベントを使ってはどうでしょうか?
いえいえそうではなくて^^; アプリケーションを落とさなければいけない例外と、そうではないでない例外がありますから、そうではない例外しかおきない前提で書いたロジックはダメだと思いますって事を言いたかったのです。思いもよらない例外で、困ることになると思いますよ。 [ メッセージ編集済み 編集者: セラフ 編集日時 2009-04-03 14:21 ] | ||||||||||||
|
投稿日時: 2009-04-03 14:29
ありがとうございます。
メインスレッド以外で発生した場合はUnhandledExceptionでと記事が あったので、こちらを使っていました。 ThreadExceptionで動きを見てみます。
そうですね(^-^; すべて同じ処理になってます・・・ 気をつけたいと思います。 | ||||||||||||
|
投稿日時: 2009-04-03 14:35
UnhandledException イベントは、例外ハンドラではなく、ただのイベントです。このイベントをハンドルしたからといって例外をキャッチしたことにはなりません。そこは理解されているでしょうか?
実行を継続させたいのであれば、やはり try-catch で処理する必要があります。タイマーのメソッド中に try-catch を書いて、catch したときにバルーンを表示するように制御すればよいと思います。 |