ドリンクバーゲン会場

プログラムが終了しない。2011年10月17日 10時44分11秒

今進めている開発では、起動時にタスクトレイに格納するように指示があり、
設定を追加しました。
追加した内容は、起動時にタスクトレイにアイコンを表示し、画面は最小化して表示はださない。

画面表示はアイコンをダブルクリック。
×では終了せず、最小化にする。
プログラムを終了する際にはアイコンを右クリックして、メニューを表示し、
終了をクリックすることで、プログラムを終了させる。

アイコン起動のプログラムでは、一般的な操作方法だと思います。
設定の仕方はネットに載っていたので、その通りに設定を追加し、テストしてみました。

起動時に最小化したうえで、タスクトレイにアイコンを表示させるには、
「NotifyIcon」コンポーネントを追加し、コンポーネントのIconプロパティにアイコンファイルを選択します。
次にメイン画面のプロパティにある、「WindowState」を「Minimaized」に変更すればOK!

ダブルクリックで画面を表示させる方法ですが、
「NotifyIcon」のプロパティにあるダブルクリックイベントに設定を入れます。

this.Visible = true;
if (this.WindowState == FormWindowState.Minimized)
{
this.WindowState = FormWindowState.Normal;
}
this.Activate();

1行目で画面表示を許可します。
次に最小化の設定になっているか確認し、最小化の状態であれば、ノーマルに変更しています。
最後にフォームをアクティブにすることで、画面が表示されます。


「×」で最小化させるには、「FormClosing」イベントで終了処理をキャンセルし、最小化の指定を設定します。
終了処理のキャンセルは、

e.Cancel = true;
this.Visible = false;

上記の2行を追加することで、最小化の指定となります。
上の行が終了処理をキャンセルする処理で
下の処理が、画面を最小化する処理になります。

最後にプログラムを終了させる処理を追加します。
まず、「ContextMenuStrip」を追加し、「終了」の項目を入力します。
入力した「終了」をダブルクリックして、そこに終了の処理を追加します。

notifyIcon1.Visible = false;
Application.Exit();

上記の2行を追加します。
上の行は、タスクトレイに表示されているアイコンを消すための設定です。
これは、終了時にアイコンだけ表示が残ることを防ぐためのものです。
下の行がプログラムを終了するための処理になります。

これらの設定を追加し、実際にテストを行ってみました。

起動時にアイコンのみ表示し、ダブルクリックで画面の表示を行い、
×で最小化とここまでは、順調にいきました。
しかし、最後の終了処理で、アイコンは消えているのに、プログラムが終了しないという状況になりました。

当初はアイコンが消えていたので、プログラムも終了しているのかと思っていたのですが、
VisualStudioが実行中のままになっていたので、おかしいなぁと思っていました。
サーバーとの通信プログラムなので、サーバー側から通信してみると、たしかに動いているようです。
アイコンは消えているけどプログラム自体は終了していませんでした。

いろいろ調べてみると、終了に関しては確実ではないようでした。
別の終了方法がないか確認して終了処理を変更しました。

notifyIcon1.Visible = false;
System.Environment.Exit(1);

「Application.Exit();」を「System.Environment.Exit(1);」に変更したところ、
無事に終了させることができました。
掲示板などでは、使わない方が良いとかかれている方もいらっしゃったのですが、
とりあえず、終了できないと話にならないので、とりあえずこれで様子を見てみようと思います。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://n-box.asablo.jp/blog/2011/10/17/6159214/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。