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

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

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

キャンセルボタンで実行中のプログラムを止めたい!!


(過去ログ 5 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■5226 / inTopicNo.1)  キャンセルボタンで実行中のプログラムを止めたい!!
  
□投稿者/ コブ 二等兵(1回)-(2006/08/01(Tue) 14:09:12)

分類:[VB.NET] 


分類:[VB.NET] 

いつもお世話になっています。
コブと申します。

<質問事項>
キャンセルボタンで実行中のプログラムを終了するには
どうようにすればよろしいでしょうか。

<処理概要>
フォームには「実行ボタン」と「キャンセルボタン」があり、
「実行ボタン」では、ファイルの作成をしています。
ファイル作成中に「キャンセルボタン」がクリックされると
「実行ボタン」で作成したファイルを消去する処理を行っています。

<現  状>
「キャンセルボタン」をクリックするとファイルは消去されるように
なりましたが、「キャンセルボタン」処理が終了したあとに
「実行ボタン」の処理が再び動きだして、エラーになります。

どなたか、解決方法をご教授下さい。

0
引用返信 編集キー/
■5228 / inTopicNo.2)  Re[1]: キャンセルボタンで実行中のプログラムを止めたい!!
□投稿者/ まどか 少佐(184回)-(2006/08/01(Tue) 15:42:59)

分類:[VB.NET] 

> 「キャンセルボタン」をクリックするとファイルは消去されるように
> なりましたが、「キャンセルボタン」処理が終了したあとに
> 「実行ボタン」の処理が再び動きだして、エラーになります。

「キャンセルボタン」はフォームを閉じるためのものではなく
「実行ボタン」により動き出した処理を途中でやめるためのボタンという解釈でよいでしょうか?

そうであれば、
実行中の処理へ「すぐにやめなさい」という要求をどのように伝えていますか?

0
引用返信 編集キー/
■5229 / inTopicNo.3)  Re[2]: キャンセルボタンで実行中のプログラムを止めたい!!
□投稿者/ コブ 二等兵(2回)-(2006/08/01(Tue) 16:00:07)

分類:[VB.NET] 

まどかさん、ご返答ありがとうございます。

No5228に返信(まどかさんの記事)
> 「キャンセルボタン」はフォームを閉じるためのものではなく
> 「実行ボタン」により動き出した処理を途中でやめるためのボタンという解釈でよいでしょうか?

「キャンセルボタン」は「実行ボタン」により動き出した処理を
途中でやめるためのボタンです。

> そうであれば、
> 実行中の処理へ「すぐにやめなさい」という要求をどのように伝えていますか?

その肝心な命令の部分が分かっていません。
いろいろと検索を心みている状況ですが、該当するサンプルやサイトが
見つからずに悪戦苦闘をしています。
ご教授よろしくお願いします。

0
引用返信 編集キー/
■5232 / inTopicNo.4)  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
引用返信 編集キー/
■5246 / inTopicNo.5)  Re[4]: キャンセルボタンで実行中のプログラムを止めたい!!
□投稿者/ コブ 二等兵(3回)-(2006/08/02(Wed) 08:52:09)

分類:[VB.NET] 

返信遅くなり、すみませんでした。

No5232に返信(まどかさんの記事)
> たぶん、実行中の処理にかかわらず無条件にキャンセルボタン内の処理をおこなっていると想像します。

> また、実行中の処理の最後(End Subなど)を抜けてからキャンセルボタンの処理が開始されませんか?

DoEvents処理を各処理に入れていましたので、
キャンセルボタンが押下された時点の処理に
キャンセルボタンの処理を行い戻っていました。

いろいろとご教授ありがとうございました。
また、つまづく時がありましたら、宜しくお願いします。
まどかさんが教えてくださったサイトを参考に頑張ります。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -