I長いテキストファイルを読み取り、非常に長い操作を実行するプログラムをVB6で作成しました。 私はプログレスバーも実装しましたが、私の問題は、プログラムが「応答していません」と言ってから、タスクが完了したときに再び応答することです。VB6アプリケーションが応答を停止します
この「応答しない」問題を削除するにはどうすればよいですか?
I長いテキストファイルを読み取り、非常に長い操作を実行するプログラムをVB6で作成しました。 私はプログレスバーも実装しましたが、私の問題は、プログラムが「応答していません」と言ってから、タスクが完了したときに再び応答することです。VB6アプリケーションが応答を停止します
この「応答しない」問題を削除するにはどうすればよいですか?
メッセージを処理せずに処理が長時間になると、Windows/Explorerはプロセスを「応答しない」状態に変更します。 VB6では、DoEvents
を呼び出さずに長いコードセクションを実行すると、これが発生します。
残念ながら、VB6では複数のスレッドが簡単に実行されないため、操作中にDoEvents
に定期的に電話するのが最適です。理想的には、これは進行状況バーの位置を更新した直後になります。
これを行うときは、再入国から守るために注意する必要があります。これは、長時間の操作が開始されたときにコントロールを無効にして、完了したときにコントロールを有効にすることで十分です。 キャンセルする場合は、キャンセルボタンのクリックイベントで設定したブール値を使用し、の後にをチェックし、DoEvents
を呼び出す必要があります。
+1議論されているように[ここ] [http://stackoverflow.com/questions/155517/cancelling-a-long-running-process-in-vb6-0-無条件で) – MarkJ
長い操作でDoEvents
に電話することはできますが、それにはvarious caveatsが関連付けられているので注意してください。
ようこそStackOverflow。 [礼儀](http://stackoverflow.com/faq#etiquette)に関するFAQや関連するページを読んで、SHOUTにしたり、太字を不必要に使用したりしないでください。 – Deanna
関連する質問に興味があるかもしれません。[Vb6で長時間実行されるプロセスをキャンセルする](http://stackoverflow.com/questions/155517/cancelling-a-long-running-process-in-vb6-0-without- VB6でスレッドを使う(http://stackoverflow.com/questions/383162/to-use-thread-in-programming-in-vb6)と[Vb6アプリのkillイベントを作成する](http: //stackoverflow.com/questions/727386/making-ac-sharp-kill-event-for-a-vb6-app)。タイトルは関連していないように見えるかもしれませんが、答えはあなたに役立ちます。 VB6でバックグラウンド処理を行うことができるいくつかの異なる方法について説明しています – MarkJ