長いテキスト ファイルを読み取り、非常に長い操作を実行する VB6 で書かれたプログラムがあります。プログレスバーも実装しましたが、私の問題は、プログラムが「応答していません」と表示され、タスクが完了すると再び応答を開始することです。
この「応答しない」問題を解決するにはどうすればよいですか?
長いテキスト ファイルを読み取り、非常に長い操作を実行する VB6 で書かれたプログラムがあります。プログレスバーも実装しましたが、私の問題は、プログラムが「応答していません」と表示され、タスクが完了すると再び応答を開始することです。
この「応答しない」問題を解決するにはどうすればよいですか?
Windows/Explorer は、メッセージを処理しない時間が長すぎると、プロセスを「応答なし」状態に変更します。VB6 では、 を呼び出さずにコードの長いセクションを実行すると、これが発生しますDoEvents
。
残念ながら、VB6 では複数のスレッドを簡単に処理できないためDoEvents
、操作中に定期的に呼び出すのが最善の方法です。理想的には、これは進行状況バーの位置を更新した直後です。
これを行うときは、再入可能性を防ぐために注意する必要があります。これは、長い操作の開始時にコントロールを無効にし、終了時に再度有効にすることで簡単に行えます。キャンセルさせたい場合は、キャンセル ボタンのクリック イベントで設定したブール値を使用し、呼び出し後DoEvents
に確認する必要があります。
DoEvents
長い操作を呼び出すことができますが、それに関連するさまざまな注意事項があるため注意してください。