C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 5 を表示中)
■5232 / )  Re[3]: キャンセルボタンで実行中のプログラムを止めたい!!
□投稿者/ まどか 少佐(185回)-(2006/08/01(Tue) 18:18:38)

分類:[VB.NET] 

> 「キャンセルボタン」は「実行ボタン」により動き出した処理を途中でやめるためのボタンです。
>
>>実行中の処理へ「すぐにやめなさい」という要求をどのように伝えていますか?
>
> その肝心な命令の部分が分かっていません。

たぶん、実行中の処理にかかわらず無条件にキャンセルボタン内の処理をおこなっていると想像します。
また、実行中の処理の最後(End Subなど)を抜けてからキャンセルボタンの処理が開始されませんか?

途中でやめるということをするには、対象の処理の中でその要求を監視しなくてはなりません。
一般的にその方法としては
・キャンセルボタンではその要求を表すBoolean変数(CancelRequested As Boolean など)をTrueにするのみ。
・対象の処理では適当な(必要な)タイミングでその変数を監視してTrueなら処理を中止する。
というふうになります。

さらにその2つの処理が正しく動作するには、その2つの処理が「非同期」で実行される必要があります。
つまり、先に書いた
「実行中の処理の最後(End Subなど)を抜けてからキャンセルボタンの処理が開始されませんか?」
は、「同期」で実行されていませんか?という意味です。

それを実現する方法として、DoEvents(完全な非同期ではない)とスレッド処理があります。
次の、どぼんさんのサイトのTipsを参考にしてみてください。
http://dobon.net/vb/dotnet/programing/abortprocess.html
スレッド処理に関しては、Framework2.0(VS2005)であれば新しくBackgroundWorkerコンポーネントが用意されましたので
あわせて調べてみてください。


0
返信 編集キー/


管理者用

- Child Tree -