Windows98上で、VB6SP6のアプリを常駐起動させてます。
OSシャットダウン時(スタート⇒Windowsの終了⇒電源断)を
実施すると、
「このプログラムからの応答がありません(待機、終了、キャンセル)」
が表示され、いちいち「終了」を選択しないと終わりません。
Form_QueryUnloadイベント内で
Unload Form1
End
を実施しても同じです。
Form_QueryUnloadが呼び込まれていないような気もします。
(Form_QueryUnload内でMsgboxで、メッセージを出力しようとしても出ませんでした)
はまってます。どなたかご教授いただけないでしょうか。
単純なアプリケーションをつくり、現状のプログラムとどこが違うのか探ってみる必要が有るのでは?
ガッさんご連絡ありがとうございます。
あの後、単純なアプリを作成し、対象PGとの違いを確認しました。
大きな違いとしては、対象PGは3秒間隔でファイル監視している
処理がループしていることが分かりました。
この3秒間隔でループしている処理が継続されるがために
OSのシャットダウンでも落ちてくれないと思われます。
シャットダウンを感知してこの処理を終わらせることを
したいのですが、その方法をどなたかご教授いただけないでしょうか。
※他にいい方法があればご教授いただきたいです。
QueryUnloadの最初で「3秒間隔でファイル監視している
処理のループ」を止めたらいかがでしょうか
我龍院忠太さんご連絡ありがとうございます。
皆様のおかけで解決することができました。
対応方法は、
Do
DoEvents
'hogehoge
Loop
としました。
DoEventsを入れることにより、Windows側に制御を返すようにし、
シャットダウン時、この制御が返されたタイミングでシャットダウン
するようになりました。
ありがとうございました。
それ、本当に終わっていますか?
たとえば次のコードの"様な"感じなのだとおもいますが、
下のコードはForm1を消してもプロセスは依然残ったままです
Option Explicit
Private WithEvents cmd As CommandButton
Private Sub cmd_Click()
Dim i As Long
cmd.Enabled = False
Do
DoEvents
Me.Caption = i
i = i + 1
Loop
End Sub
Private Sub Form_Load()
App.Title = "終わらないアプリケーション"
Set cmd = Me.Controls.Add("VB.CommandButton", "cmd")
With cmd
.Move 0, 0, 1000, 1000
.Visible = True
End With
End Sub
ツイート | ![]() |