2012-06-22 10 views
5

I長いテキストファイルを読み取り、非常に長い操作を実行するプログラムをVB6で作成しました。 私はプログレスバーも実装しましたが、私の問題は、プログラムが「応答していません」と言ってから、タスクが完了したときに再び応答することです。VB6アプリケーションが応答を停止します

この「応答しない」問題を削除するにはどうすればよいですか?

+1

ようこそStackOverflow。 [礼儀](http://stackoverflow.com/faq#etiquette)に関するFAQや関連するページを読んで、SHOUTにしたり、太字を不必要に使用したりしないでください。 – Deanna

+1

関連する質問に興味があるかもしれません。[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

答えて

7

メッセージを処理せずに処理が長時間になると、Windows/Explorerはプロセスを「応答しない」状態に変更します。 VB6では、DoEventsを呼び出さずに長いコードセクションを実行すると、これが発生します。

残念ながら、VB6では複数のスレッドが簡単に実行されないため、操作中にDoEventsに定期的に電話するのが最適です。理想的には、これは進行状況バーの位置を更新した直後になります。

これを行うときは、再入国から守るために注意する必要があります。これは、長時間の操作が開始されたときにコントロールを無効にして、完了したときにコントロールを有効にすることで十分です。 キャンセルする場合は、キャンセルボタンのクリックイベントで設定したブール値を使用し、の後にをチェックし、DoEventsを呼び出す必要があります。

+0

+1議論されているように[ここ] [http://stackoverflow.com/questions/155517/cancelling-a-long-running-process-in-vb6-0-無条件で) – MarkJ

1

長い操作でDoEventsに電話することはできますが、それにはvarious caveatsが関連付けられているので注意してください。

関連する問題