- PR -

自動的に終了するには

投稿者投稿内容
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2007-01-19 10:41
引用:

渋木宏明(ひどり)さんの書き込み (2007-01-19 09:59) より:

引用:

もっともExitしてもアプリが終了するとは限りませんが



Application.Exit() はかなり強力だと思うんですが、Application.Exit() でアプリが終了しない条件とかってありましたっけ?


えーと、例えば別スレッドを立ち上げているときとか?
メインスレッドは終了するけど、サブスレッドは止まらないんじゃないでしょうか。
(こないだ実際そういうのを実感する機会があったので)

なんにせよ、どうやって動いているかを知ることは大事かもしれないですね。
と、ちゃんと勉強してなくて流れでなんとなく考えてるだけの私が言ってみる orz
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2007-01-19 10:51
引用:

ぽぴ王子さんの書き込み (2007-01-19 10:41) より:

えーと、例えば別スレッドを立ち上げているときとか?
メインスレッドは終了するけど、サブスレッドは止まらないんじゃないでしょうか。
(こないだ実際そういうのを実感する機会があったので)



マネージドなスレッドの場合、Thread.IsBackground プロパティに依存します。

// Application.Run を 2 行続けて書いて、
// 先に起こしたメインフォーム上で Application.Exit を呼び出すと
// 二つ目の Application.Run のメインフォームが瞬殺される……。

[ メッセージ編集済み 編集者: Hongliang 編集日時 2007-01-19 10:52 ]
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2007-01-19 10:59
引用:

えーと、例えば別スレッドを立ち上げているときとか?
メインスレッドは終了するけど、サブスレッドは止まらないんじゃないでしょうか。



なるほど、Thread.IsBackground = false なスレッドが居残っている時ですね。
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2007-01-19 11:02
引用:

Hongliangさんの書き込み (2007-01-19 10:51) より:

マネージドなスレッドの場合、Thread.IsBackground プロパティに依存します。

// Application.Run を 2 行続けて書いて、
// 先に起こしたメインフォーム上で Application.Exit を呼び出すと
// 二つ目の Application.Run のメインフォームが瞬殺される……。


試してみました。
おお、本当ですねー(今まで知らなかったのかアンタ)。

Application.Exit はまぁ名前からしてそういう用途?に使うためにあるのだと思います
けど、どうも「なんでもかんでも Exit で捨てちゃえばおk」って感じがして少し違和感が。
# 「拳銃は最後の武器だ」みたいなもん?(違
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-01-19 11:56
引用:
Application.Exit() はかなり強力だと思うんですが、Application.Exit() でアプリが終了しない条件とかってありましたっけ?

シングルスレッドでも開いているFormがあるとき、たとえばFormClosingイベントで
e.Cancel = true
とかすれば終了しません。少なくとも.NET2.0では。

[ メッセージ編集済み 編集者: べる 編集日時 2007-01-19 12:16 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-01-19 11:59
引用:

べるさんの書き込み (2007-01-19 06:45) より:

ここの例のようにアプリケーション終了の目的で使っていいものと思っていました。


Windows Form の場合は、これでは強制終了扱いです。
それと、MSDN ライブラリの使用例のコードは、問題のないコードばかりではありません。

引用:

べるさんの書き込み (2007-01-19 06:45) より:

もっともExitしてもアプリが終了するとは限りませんが


通常、Application.Exit メソッドで、アプリケーションは終了します
ただし、プロセスが終了するとは限りません
(呼び出し元の Run メソッドに制御を返すだけですから)

# プロセスを強制終了するには、System.Environment.Exit([System.Integer]) メソッド

ということで、Application の終了 == プロセスの終了だと誤解なさっていたかと思っていたのですが...
書いている最中の返信を拝見しますと... どうも、そういう意味ではなさそうでした。orz

# Application の終了 == プロセスの終了だと思っている方って多いので、
# 確認の投稿をしたつもりだったのですが、orz な結果でしょんぼりです。(;´・ω・`)

[ メッセージ編集済み 編集者: じゃんぬねっと 編集日時 2007-01-19 12:04 ]
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-01-19 16:30
引用:
ということで、Application の終了 == プロセスの終了だと誤解なさっていたかと思っていたのですが...

これがイコールとは思っていませんでしたが、

引用:
じゃんぬねっとさんの書き込み (2007-01-19 11:59) より:

Windows Form の場合は、これでは強制終了扱いです。

引用:
Hongliangさんの書き込み (2007-01-19 10:51) より:

// Application.Run を 2 行続けて書いて、
// 先に起こしたメインフォーム上で Application.Exit を呼び出すと
// 二つ目の Application.Run のメインフォームが瞬殺される……。

これらの指摘で気づきました。Application.Exitすることと、スタートアップFormを
Closeすることはほとんど同じだと思っていました。。。。

#なんかものすごく勉強になりました。。

#MSDNのApplication.Exitに書いてある「強制的に Run を返します。」というのに違和感を感じたので
原文を見ると「forces Run to return.」。「Runに(対して)強制的にreturnさせます」ということで
#Runメソッドは終了(return)するんであってますよね。

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