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

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

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

Re[7]: Formを閉じても処理が止まりません


(過去ログ 45 を表示中)

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

■24474 / inTopicNo.1)  Formを閉じても処理が止まりません
  
□投稿者/ あづみ (1回)-(2008/09/03(Wed) 15:21:51)

分類:[VB.NET/VB2005] 

はじめてですが、
質問させていただきます。

Form1の測定ボタンのクリックイベントで、
Form2を開き、1分間の処理を行った後に
「処理終了」というメッセージボックスを出して
Form2を閉じる というプログラムなのですが、

Form2の中止ボタンのクリックイベントに

Form2.close()

としているにも関わらず、
閉じた後も処理を続け、一分経つと
「処理終了」というメッセージが出てしまいます。

Form2.Dispose でも同じでした。

Form2を閉じたら処理を終わらせるようにできませんか?
よろしくお願いします。

以下ソースです。


【Form1】
Public Class Form1

Private Sub btnSokutei_Click(省略)

Dim f As Form2 = New Form2

f.Show()

End Sub

End Class


【Form2】
Public Class Form2

Private Sub Form2_Form_Load(省略)

Dim intPass As Integer

For intPass = 1 to 60

'--- 処理 ---

System.Threading.Thread.Sleep(1000)
Application.DoEvents()

Next

MsgBox("処理終了")

End Sub

Private Sub btnThushi_Click(省略)

Me.Close()

End Sub

End Class

引用返信 編集キー/
■24481 / inTopicNo.2)  Re[1]: Formを閉じても処理が止まりません
□投稿者/ もょもと (42回)-(2008/09/03(Wed) 15:52:37)
2008/09/03(Wed) 15:52:51 編集(投稿者)

>Form2の中止ボタンのクリックイベントに

ちょっとだけボタン名が気になったので確認させて下さい。
中止ボタンというのは、1分間の処理の中止をするためのボタンとして作成されたのですか?
それともFormを閉じるためのボタンとして作成されたのですか?

>閉じた後も処理を続け、一分経つと
>「処理終了」というメッセージが出てしまいます。

あづみさんのコードをコピペして実行してみましたが、
上記のような現象は起きませんでした。
引用返信 編集キー/
■24482 / inTopicNo.3)  Re[1]: Formを閉じても処理が止まりません
□投稿者/ たくボン (8回)-(2008/09/03(Wed) 15:55:02)
No24474 (あづみ さん) に返信
> 閉じた後も処理を続け、一分経つと
> 「処理終了」というメッセージが出てしまいます。
> 以下ソースです。

提示されたソースで確認しましたが、現象が発生しませんね。
Form2_Form_Loadの'--- 処理 ---の部分でスレッドを作成とか何かしてないですか?
引用返信 編集キー/
■24484 / inTopicNo.4)  Re[2]: Formを閉じても処理が止まりません
□投稿者/ επιστημη (1300回)-(2008/09/03(Wed) 15:58:52)
επιστημη さんの Web サイト
> 提示されたソースで確認しましたが、現象が発生しませんね。
> Form2_Form_Loadの'--- 処理 ---の部分でスレッドを作成とか何かしてないですか?

それっポいすね。
起こしたスレッドがForm2の参照を握って離さなかったら、
(スレッドが死ぬまでは)Closeしても実体が居座り続けそうね。

引用返信 編集キー/
■24487 / inTopicNo.5)  Re[3]: Formを閉じても処理が止まりません
□投稿者/ たくボン (10回)-(2008/09/03(Wed) 16:10:42)
No24484 (επιστημη さん) に返信
>>Form2_Form_Loadの'--- 処理 ---の部分でスレッドを作成とか何かしてないですか?
> それっポいすね。
> 起こしたスレッドがForm2の参照を握って離さなかったら、
> (スレッドが死ぬまでは)Closeしても実体が居座り続けそうね。

えぇ。Timerを使用せずにThreadを使っている感じからすると、それ周りかと。
引用返信 編集キー/
■24488 / inTopicNo.6)  Re[2]: Formを閉じても処理が止まりません
□投稿者/ あづみ (2回)-(2008/09/03(Wed) 16:12:16)
もょもとさん
たくボンさん
επιστημηさん

みなさんありがとうございます。


>中止ボタンというのは、1分間の処理の中止をするためのボタンとして作成されたのですか?
それともFormを閉じるためのボタンとして作成されたのですか?

Formを閉じるためのボタンとして作成しました。
閉じれば自動的に処理を中断できるのと考えていましたので、、


はじめに挙げたソースで問題が起きなかったのは申し訳ありません。
上のは実際のソースを簡潔に書いたもので実際は500行くらいあります。

準備・確認が足りなかったことと、初心者の判断で簡潔にしすぎて
手間をかけさせたことは本当に申し訳ありませんでした。

さすがに500行全て載せるのはいけませんよね、、、?

引用返信 編集キー/
■24491 / inTopicNo.7)  Re[3]: Formを閉じても処理が止まりません
□投稿者/ επιστημη (1303回)-(2008/09/03(Wed) 16:22:00)
επιστημη さんの Web サイト
> さすがに500行全て載せるのはいけませんよね、、、?

それは"思考停止"あるいは"思考放棄"ってやつでしょ。

Close()しても生き残る"なにか"がFormの参照を握ってはいませんか?
その"なにか"がある限り、画面から消えても魂は消えません。
# 弱参照で握ってりゃ別だけども

引用返信 編集キー/
■24493 / inTopicNo.8)  Re[4]: Formを閉じても処理が止まりません
□投稿者/ もょもと (43回)-(2008/09/03(Wed) 16:25:15)
たくボンさんとεπιστημηさんが仰っている部分に関しての確認はされましたか?

> さすがに500行全て載せるのはいけませんよね、、、?

「'--- 処理 ---」の部分でスレッドを作成しているような処理があるのでは?という意見を頂いているわけですから、
まずはこの問題に関して関係がありそうな「'--- 処理 ---」の部分のみ記載してみてはいかがでしょうか。
引用返信 編集キー/
■24500 / inTopicNo.9)  Re[5]: Formを閉じても処理が止まりません
□投稿者/ くだん (4回)-(2008/09/03(Wed) 17:05:49)
サンプルコードが正常に終了することを確認したら、
問題のコードとサンプルコードの違う部分を全部コメントアウトして、
処理ブロック単位で、エラーの起こらないように調整しながら
コメント行を復帰していって、プログラムが終わらなくなった
ところが原因の箇所です。

問題箇所の絞込みは、手間をかければ小学生でも出来る作業です。
引用返信 編集キー/
■24514 / inTopicNo.10)  Re[6]: Formを閉じても処理が止まりません
□投稿者/ まどか (586回)-(2008/09/03(Wed) 18:03:19)
そもそも、画面が出ていない(Loadの途中)のにボタンが押せるって。。。と思ってました。

Threadに意味があるかはわかりませんが、タイマコンポーネントで十分のような。
あとLoadの中で主処理をおこなってはいけませんね。
スレッドを起動する、タイマを起動するにとどめましょう。

書かれた情報のレベルでの予想ですが
中止ボタンつき実行中ダイアログにしてしまって、ダイアログとスレッド(処理本体)を分離し、親がそれぞれを呼び出す
ってことにできるならそっちのほうがいいかも。

引用返信 編集キー/
■24521 / inTopicNo.11)  Re[7]: Formを閉じても処理が止まりません
□投稿者/ なちゃ (168回)-(2008/09/03(Wed) 18:34:03)
ところで特に自分でスレッド使ったりはしてないように見えるんですが気のせいですか?
もちろん出てないコードで使ってるのかも知れませんが…

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -