投稿者 るしぇ  (社会人) 投稿日時 2009/10/21 19:35:22
> ながーい処理を途中でとまるかどうか判断する機能は何を使えばいいんですか?
daive さんや ?-? さんの書き込みにつながります。
単語の意味が分からなければコンピュータ用語辞典ででも調べてください。
辞書に載ってる基礎用語レベルですので。

基本的に1つのプログラムで1つの処理を実行すると、他の処理は待機状態になります。
?-? さんの書かれたイベントキューの仕組みです。
まぁ、キューに溜まってくれればいいのですが、タイムアウトでそのアプリケーションが
応答していないと判断されたり、キーボードを押されたという情報が実行されず、処理落ち
になったりもしますね。

つまり普通にやれば、ながーい処理をやってる時点で最優先ボタンは押せません。
(押しても反応しません)
1つのながーい処理を実行しながら、「画面の入力を受け付ける」という処理も同時に
実行できるようにする必要があります。これにスレッドという考えが必要です。

VB2005 以降なら BackgroundWorker クラスがよく使われます。
http://msdn.microsoft.com/ja-jp/library/system.componentmodel.backgroundworker(VS.80).aspx
それ以前なら Thread クラス。「マルチスレッド」というキーワードも有効です。
http://msdn.microsoft.com/ja-jp/library/aa289496(VS.71).aspx

ここまで勉強すれば「ながーい処理の途中で画面からの入力を受け付ける」ことができる
ようになります。

そこから、daive さんの書き込みのような設計で画面から入力された結果を
ながーい処理に伝えることを考えます。強制終了は良くないので、よく使われる手は
画面の入力から中止フラグの意味を持つ変数を変更します。ながーい処理は都合の
いいタイミングで中止フラグを確認し、中止の命令が出ていたら処理を中止します。

この「都合のいいタイミング」はその処理の内容によって違います。ループ処理なら
毎回ループの先頭で確認するとか、5回ループが回ったら確認するとか、プログラム次第です。
ループ処理なら、処理を中止するという意味ではループを抜ければいいとなります。