.NET 3.5 C#Winformsアプリがあります。このようなGUIはなく、ContextMenuを持つNotifyIconだけです。次のようにNotifyIconの問題がWinforms Appで消えていない
Iは、目に見える= falseにNotifyIconを設定しApplication_Exitイベントでそれを処分しようとした:
if (notifyIcon != null)
{
notifyIcon.Visible = false;
notifyIcon.Dispose();
}
アプリ括弧内のコードに到達するが、ヌルREFをスローVisible = falseを設定しようとすると例外が発生します。
私はいくつかの場所を読んでフォームクロージングイベントに入れましたが、そのコードは決してヒットしませんでした(多分私はそのようなフォームを表示していませんか?)。
実際に動作するようにこのコードを入力することはできますか?私がそれを入れないと、あなたはマウスをその上に動かすまで、トレイに残っている残ったアイコンを手に入れます。
乾杯。私が気づいた余分
EDIT
だけで何か...........私はアプリでのClickOnceを使用してい
....... ..私がNotifyIconのContextMenuからアプリケーションを終了するだけで、例外は記録されません。
applicaitonはここにアップグレードするためにチェックした後Application_Exitイベントが発生したときだけ。..
private void CheckForUpdate()
{
EventLogger.Instance.LogEvent("Checking for Update");
if (ApplicationDeployment.IsNetworkDeployed && ApplicationDeployment.CurrentDeployment.CheckForUpdate())
{
EventLogger.Instance.LogEvent("Update available - updating");
ApplicationDeployment.CurrentDeployment.Update();
Application.Restart();
}
}
は、このヘルプをしていますか?
を働いていた、それはいくつかのApplication.Runを(持つことが可能ですので、今、私はそれについて考えることを、私は)このために、このイベントを使用しないことをお勧めします行くループさまざまなスレッドで実行され、Exitイベントがトリガーされるため、アイコンが早期に消える可能性があります。 –
完全にあなたに同意します!私は自分のアプリケーションでこのイベントをクリーンアップの目的で使用しないことを好みます。しかし、なぜ「このコードが例外を投げるのか」という質問に対する最も単純な答えです。このコードを別の方法で設計する方法については、notifyIconの周りにラッパーの使い捨てクラスを作成することを提案して、notifyIconのライフタイムを制御します。 (新しいNotifyIconController()){Application.Run()}を使用して書き込みます。このようなもの –