• ベストアンサー

終了してもプログラムが実行したまま(VB)

todo36の回答

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

>原因は何でしょうか? プロセスが動いたままだから。 >ずっとDo Loopが実行されたままです。 これです。 Loopから抜けなければプロセスは終わりません。 >Do Loopのあいだはフォーム上に文字を表示するのに手が回らないからDoEventsを使ってイベントを実行させなさい、といわれました DoEventsだけでは重いのでSleepも入れた方がいいでしょう。 いや、Loopで回すのではなくTimerを使うのがよいと思います。

crooked_man
質問者

補足

ありがとうございます。 ということは、いったんLoopに入ったら、中断させる方法がない、ということでしょうか。 また、Timerをつかうと、途中で中断できるのでしょうか。かなり時間のかかる処理なので、ユーザがいやになったら中断できるようにしたいと思っています。

関連するQ&A

  • コンパイルしたプログラムが終了しないのですが

    VB6.0で教えてください。 コンパイルしてできたプログラムを実行し、フォームの右上にあるコントロールボックスから閉じると、フォームは非表示になるものの、プログラム自体がメモリに残っているようです。 完全に消すには何かコードを追加する必要があるのでしょうか?

  • vb2005でプログラムをとめるコードは?

    お世話になります。 vb2005でプログラムに5秒間、時間をとめようとおもいます。 これだとTimerにエラーがでてしまいます。 ('Timer' は型です。有効な式ではありません。) どこをどうなおせばエラーがでなくなるのでしょうか? 教えてください。お願いします。 Dim sngSt As Single sngSt = Timer Do While Timer - sngSt < 5 DoEvents() Loop

  • [VB6] フォームを閉じる方法について

    お世話になります。 VB6で別フォームを起動する際の親フォームの閉じ方について 質問させてください。 呼び出し元フォームからShowメソッドで別フォームを起動すると、 呼び出し先のフォームでマウスのカーソルが砂時計表示になってしまいます。 (呼び出し元のフォームはUnload Meで閉じています。) [Form1の処理] Private Sub Button1_Click() Form2.Show Unload Me End Sub ※Form1は呼び出し元。Form2は呼び出し先。 原因について、どなたかご存知の方がいらっしゃいましたら、 ご教授願えますか?

  • VB2005 Do Loopについて

    VB2005 でDo Loopを使用していますが、このDo Loop内の処理をしている時にイベント(例えばボタンをクリック)が発生した場合、その処理をしたいのですがどうすれば良いでしょうか? VB6の時は、DoEventsを使用していましたが、VB2005でも使用できるのでしょうか? ご存知の方がいらっしゃいましたら、教えて頂きたいのですが。 よろしくお願いします。

  • タスクスケジューラでVB6のプログラムが実行しない

    VB6で作ったプログラムをWindows7において、タスクスケジューラで起動させたが、実行しない。 フォ-ムは1個だけで、その中のACTIVATEから、同フォーム内のルーチンを呼び出して目的の動作をさせるようになっています。手動で起動させると、目的の動作をして終了するが、タスクスケジューラではフォームを表示した状態で止まっている。そのフォームをクリックすると目的の動作を行う。なお、フォームはその時実行されている別のVB6のフォームの前面[最前面)に表示されている。目的は1日1回自動的に特定ファイルの状態を調べたいだけです。 よろしくお願いします。

  • プログラム実行時の確認は

    今まではコンボボックス内をセレクトしたあとすぐに計算を実行して表示するプログラムだったのですが、テキストボックスにデータを入力後ボタンを押したときに計算を行うように変更しようとして、新規に作成したボタンの「Private sub Command1_Click()」にコンボボックス内に書いていたプログラムをコピーして実行したのですが、ボタンを押してもエラーで止まるわけでもなく、しかし、実行結果を表示するでもなく、まるでループにでも入っているようなのですが、実行中にどこでどうしているか確認する方法を教えてください。

  • フォームを閉じないようにする VB6 SP6

    VB6 でプログラムを作成中です。 プログラムを実行して、フォームが立ち上がった所で右上の×を押し、画面を閉じようとします。 そこで以下のコードで、もし×が押されたらvbYesNoメッセージボックスを表示させ、もし「いいえ」が押されたらフォームを閉じないようにし、実行画面を維持したいのです。 しかし、Exit Sub ですとプログラムが終了してしまい、困っています。宜しくお願い致します。 Private Sub Form_Unload(Cancel As Integer) 'フォームを閉じる Dim last As String last = MsgBox(" プログラムを終了させますか?", vbYesNo, "終了確認1") If (last = vbYes) Then Dim last2 As String last2 = MsgBox(" 本当にプログラムを終了させますか?", vbYesNo, "終了確認2") If (last2 = vbNo) Then Exit Sub End If End If If (last = vbNo) Then Exit Sub End If End Sub

  • VB6(SP5) 無限ループ

    VB6(SP5)で、プログラミングをしております。 コマンドボタンをクリックすると、別のフォームを開く仕様にしております。 下記のプログラミングです。 ブレイクポイントで、テキストボックスにフォーカスが戻る事は、確認しております。 が、再び、同じフォームが開きます。要するに無限ループになってしまって いるのです。しかも、開発マシン(Win2000)では、再現しません。 実際のあるマシン(Win98SE)のみ再現します。(全てではありません) 助言の程、よろしくお願い致します。 Private Sub CB_Code_Click() Form1.iDoF = True Form1.Show Do While Form1.iDoF = True DoEvents Loop Set Form1 = Nothing Form_Activate DoEvents Text1.SetFocus End Sub

  • アップロードができない

    ローカルHDDにあるファイルをネット上にアップロードしたいため下記コードを作成したのですがコピーする事ができませんでした。 PC環境:WindowsXP ProSP1、VB6.0SP6です。 どうすればアップーロードできるのでしょうか? どなたか御願い致します。 ///////////////////////////////////////////////////// Private InetState As Boolean Private InetError As String Private Sub Command1_Click() Inet.RequestTimeout = 2 Inet.UserName = "*" Inet.Password = "***" Inet.Execute "*", "PUT c:\11.txt 11.txt" Do DoEvents Loop Until InetState If InetError <> "" Then MsgBox InetError InetState = False Inet.Execute "*", "CLOSE" Do DoEvents Loop Until InetState InetState = False Inet.Execute "*", "QUIT" Do DoEvents Loop Until InetState Inet.Cancel Unload Me End Sub ///////////////////////////////////////////////

  • VBプログラムを終了させないようにするには

    VB2005 WindowsXPでの開発を考えています。 メニューボックスは表示せず、終了ボタンからの終了にはパスワードの入力を求めるようにします。 しかしこれだけでは、タスクマネージャ等からの強制終了ができてしまいます。 強制終了も不可能にすることは可能でしょうか? また、できるのであればプログラム起動中は、Windowsの操作(エクスプローラやスタートメニューなど)をできないようにしたいと考えています。現状ではモーダル状態のフォームを最大化して表示させようと思っていますが、他に良い方法を御存知でしたらお願い致します。