- PR -

NotifyIconでのバルーン表示について

投稿者投稿内容
べん吉
会議室デビュー日: 2009/04/02
投稿数: 9
投稿日時: 2009-04-03 13:31
引用:

テッテさんの書き込み (2009-04-03 12:49) より:
状況がいまいちわからないのですが・・・

まず、UnhandedException 内にブレークポイントを置いてデバッガで中断させますよね。そこからステップ実行していくと、どこかで例外が発生するのでしょうか?

もしそうならその部分のコードと、どの行で例外が発生するのかを教えてください。

それともそういう意味ではなく、デバッガでは例外が発生しないのに実行ファイルから直接起動すると「問題が発生したため...」のメッセージが表示されるということでしょうか?

[追記]
もし後者なら、Windows のイベントビューアのアプリケーションログを見てみるとエラーの情報が得られるかも知れません。
[/追記]




状況が詳しくなく申し訳ありません。
下記の通りコードを書いています。(省略している部分もあります)
デバッグすると、
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にしています。
---------------------------------------------------------------------------
セラフ
ベテラン
会議室デビュー日: 2005/12/01
投稿数: 95
お住まい・勤務地: 東北の顔の形といえば
投稿日時: 2009-04-03 13:38
あら・・・じゃぁやっぱり
コード:
e.ExitApplication = False


が抜けてるだけですね。

Application_UnhandledExceptionに上記追加したら万事解決しませんか?

それとは別に、記載のロジックはあまり好きではないです・・・
何が起きてもバルーン出して終わりってのはどうも・・・
セラフ
ベテラン
会議室デビュー日: 2005/12/01
投稿数: 95
お住まい・勤務地: 東北の顔の形といえば
投稿日時: 2009-04-03 13:57
引用:

べん吉さんの書き込み (2009-04-03 13:31) より:
タイマー停止しているのですが、何故かインターバル毎に毎回同じエラーが
出ています。


見落としてました。
こっちは、インターバルが短くて、
タイマー停止前にスレッドプールに溜まったものが実行されてるだけとか無いですか?
べん吉
会議室デビュー日: 2009/04/02
投稿数: 9
投稿日時: 2009-04-03 13:59
ありがとうございます。

引用:

セラフさんの書き込み (2009-04-03 13:38) より:
あら・・・じゃぁやっぱり
コード:
e.ExitApplication = False


が抜けてるだけですね。

Application_UnhandledExceptionに上記追加したら万事解決しませんか?



イベントの引数にある、UnhandledExceptionEventArgs e に、ExitApplicationが
存在しないです。
C#の場合はまた違う方法なのでしょうか・・・
Frameworkは2.0でも大丈夫みたいなので。

引用:

それとは別に、記載のロジックはあまり好きではないです・・・
何が起きてもバルーン出して終わりってのはどうも・・・



実際にはエラーログの出力は行う予定です。
本当は例外エラー出たら終了させたいのですが、継続させようとしています。

べん吉
会議室デビュー日: 2009/04/02
投稿数: 9
投稿日時: 2009-04-03 14:03
引用:

セラフさんの書き込み (2009-04-03 13:57) より:
引用:

べん吉さんの書き込み (2009-04-03 13:31) より:
タイマー停止しているのですが、何故かインターバル毎に毎回同じエラーが
出ています。


見落としてました。
こっちは、インターバルが短くて、
タイマー停止前にスレッドプールに溜まったものが実行されてるだけとか無いですか?



まず最初に停止しているので問題ないと思うのですが。
ただ、ずっと同じところが実行されているので、停止ができてないとかですかね?
※インターバルは10秒にしています。
セラフ
ベテラン
会議室デビュー日: 2005/12/01
投稿数: 95
お住まい・勤務地: 東北の顔の形といえば
投稿日時: 2009-04-03 14:20
おっと。C#でしたね。
たしかにVBでは、My.Application.UnhandledExceptionイベントを使いますが、
今回はAppDomain.UnhandledExceptionをつかっているのでしたね。

Application.ThreadExceptionイベントを使ってはどうでしょうか?

引用:

実際にはエラーログの出力は行う予定です。
本当は例外エラー出たら終了させたいのですが、継続させようとしています。



いえいえそうではなくて^^;
アプリケーションを落とさなければいけない例外と、そうではないでない例外がありますから、そうではない例外しかおきない前提で書いたロジックはダメだと思いますって事を言いたかったのです。思いもよらない例外で、困ることになると思いますよ。

[ メッセージ編集済み 編集者: セラフ 編集日時 2009-04-03 14:21 ]
べん吉
会議室デビュー日: 2009/04/02
投稿数: 9
投稿日時: 2009-04-03 14:29
ありがとうございます。

引用:

セラフさんの書き込み (2009-04-03 14:20) より:
おっと。C#でしたね。
たしかにVBでは、My.Application.UnhandledExceptionイベントを使いますが、
今回はAppDomain.UnhandledExceptionをつかっているのでしたね。

Application.ThreadExceptionイベントを使ってはどうでしょうか?



メインスレッド以外で発生した場合はUnhandledExceptionでと記事が
あったので、こちらを使っていました。
ThreadExceptionで動きを見てみます。

引用:

いえいえそうではなくて^^;
アプリケーションを落とさなければいけない例外と、そうではないでない例外がありますから、そうではない例外しかおきない前提で書いたロジックはダメだと思いますって事を言いたかったのです。思いもよらない例外で、困ることになると思いますよ。



そうですね(^-^;
すべて同じ処理になってます・・・
気をつけたいと思います。
テッテ
ベテラン
会議室デビュー日: 2008/03/16
投稿数: 91
投稿日時: 2009-04-03 14:35
UnhandledException イベントは、例外ハンドラではなく、ただのイベントです。このイベントをハンドルしたからといって例外をキャッチしたことにはなりません。そこは理解されているでしょうか?

実行を継続させたいのであれば、やはり try-catch で処理する必要があります。タイマーのメソッド中に try-catch を書いて、catch したときにバルーンを表示するように制御すればよいと思います。

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