待ち時間 への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 totomi  (小学生) 投稿日時 2011/5/14 10:35:16
ありがとうございます。無事に出来ました。ありがとうございます。またよろしくお願いいたします 
投稿者 (削除されました)  () 投稿日時 2011/5/14 09:45:50
(削除されました)
投稿者 (削除されました)  () 投稿日時 2011/5/14 09:43:06
(削除されました)
投稿者 (削除されました)  () 投稿日時 2011/5/13 13:26:03
(削除されました)
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2011/5/13 12:41:13
BackgroundWorker を使うのであれば、DoWork イベント内からフォーム上のコントロールを
操作してはいけないという点に注意してください。

> ComboBox1に1~10の数字があります。このComboBox1をBackgroundWorkerに渡したり受け取ったりは
BackgroundWorker から CombBox を受け取るという質問の意図が良く分かりませんが、
渡すべきは「ComboBox1」ではなく、「ComboBox1 から得た 1~10 の数字」のはずです。
ComboBox 上で選択された値を取り出す方法はわかりますか?

---
BackgroundWorker の処理を呼び出す場合、RunWorkerAsync メソッドの引数にてデータを渡せます。

DoWork イベント内では、引数から e.Argument を使って、そのデータを受け取る事ができます。
結果を返却する必要がある場合は、e.Result に結果を書き込んでください。

処理が終わると RunWorkerCompleted イベントが発生します。処理結果を受け取る場合は、
イベントの引数 e.Result から取り出してやれば OK です。


> こんな感じにしたいです
BackgroundWorker を使って待ち合わせるのであれば、たとえば

 Sub Button1_Click(~
  Button1.Enabled = False
  TextBox1.Text = "待機中"
  BackgroundWorker1.RunWorkerAsync(待ち時間)
 End Sub

 Sub BackgroundWorker1_DoWork(~
  Dim millisecondsTimeout As Integer = CInt(e.Argument)
  System.Threading.Thread.Sleep(millisecondsTimeout)
 End Sub

 Sub BackgroundWorker1_RunWorkerCompleted(~
  TextBox1.Text = "終了"
  Button1.Enabled = True
 End Sub

という感じになりますし、Timer を使う場合には、

 Sub Button1_Click(~
  Button1.Enabled = False
  TextBox1.Text = "待機中"
  Timer1.Interval = 待ち時間
  Timer1.Start()
 End Sub

 Sub Timer1_Tick(~
  Timer1.Stop()
  TextBox1.Text = "終了"
  Button1.Enabled = True
 End Sub

という感じですかね。
投稿者 totomi  (小学生) 投稿日時 2011/5/13 10:32:26
ComboBox1に1~10の数字があります。このComboBox1をBackgroundWorkerに渡したり受け取ったりは、どのようにしたら良いのでしょうか?

例えば

ComboBox1とTextBox1があります。

ComboBox1に1~10が入れてあり

BackgroundWorkerで
sleepの時間をComboBox1*1000で秒にして
sleep後にTextBox1に "終了" を表示 

こんな感じにしたいです
よろしくお願いいたします。
投稿者 totomi  (小学生) 投稿日時 2011/5/12 21:44:35
早々にありがとうございます。無事に出来ました。ありがとうございます。またよろしくお願いいたします
投稿者 YuO  (社会人) 投稿日時 2011/5/12 21:19:04
処理を分割可能であれば,タイマーを使って継続することで可能と言えば可能です。
ただ,BackgroundWorker等で別スレッドに処理を任せて,そのスレッド中でThread.Sleepで待った方が汎用的で簡単だと思います。
投稿者 totomi  (小学生) 投稿日時 2011/5/12 21:11:02
VB2010で処理と処理の間に10秒間の待ち時間を設定したいのですがどうしたらよいのでしょう?sleepだと画面が止まるのでsleep以外で、なるべく正確なのがいいです。よろしくお願いいたします