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

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

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

Re[2]: Backgroundworkerでのスレッド終了


(過去ログ 63 を表示中)

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

■36617 / inTopicNo.1)  Backgroundworkerでのスレッド終了
  
□投稿者/ タイム (1回)-(2009/06/02(Tue) 16:49:24)

分類:[VB.NET/VB2005 以降] 

はじめまして。

OS:   WinXP SP3
開発環境:VB2008 Express Edtion

Backgroundworkerをフォームに貼り付けて、スレッドで一定時間になるとフォーム再表示をしています。
・フォームロード時(初期表示)に、スレッドをスタートさせる。
・DoWorkイベントで、30秒待機(Sleep())
・RunWorkerCompletedイベントで、フォームリフレッシュ(Me.Refresh())

ある場所をクリックすると、フォームAを消して、フォームBを表示するのですが、
このときにフォームAのスレッドを、CancelAsync()で停止させています。
もちろん、WorkerSupportsCancellationをTrueにしてから。
しかし、フォームAのスレッドが動いているのです。
停止させたのに、なぜ動いているのかわかりません。

1日中、原因を調査していますが、いまだにわかりません。
どなたかご教授頂けないでしょうか?
よろしくお願いします。
引用返信 編集キー/
■36618 / inTopicNo.2)  Re[1]: Backgroundworkerでのスレッド終了
□投稿者/ なちゃ (288回)-(2009/06/02(Tue) 16:59:34)
キャンセルは自分で(ワーカースレッド側で)確認して、自分で処理を抜ける必要がありますよ。
勝手に止まるわけではありません。
もちろんスリープしてる間は調べることもできません。

この内容であればタイマーでも使う方が簡単だし望ましい気がしますか。
引用返信 編集キー/
■36619 / inTopicNo.3)  Re[2]: Backgroundworkerでのスレッド終了
□投稿者/ タイム (2回)-(2009/06/02(Tue) 17:03:43)
なちゃさん、返信ありがとうございます。

No36618 (なちゃ さん) に返信
> キャンセルは自分で(ワーカースレッド側で)確認して、自分で処理を抜ける必要がありますよ。
> 勝手に止まるわけではありません。
> もちろんスリープしてる間は調べることもできません。
ワーカースレッド側ですか?!
試したところ、止まりました!
ありがとうございます!

> この内容であればタイマーでも使う方が簡単だし望ましい気がしますか。
そう思うのですが、一定時間毎の処理が10秒以上かかる可能性があり、正確に時間を刻む必要があったので、このような設計にしました。
いろいろ考えたのですが、これしか答えが出ませんでした。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -