次のプログラムを実行するまでに間隔をあけたい

タグの編集
投稿者 仮名@トム  (中学生) 投稿日時 2012/4/25 23:06:03
VB2010でブラウザを作っているんですが・・・

Button1をクリックすると あるプログラムが実行されて 5秒程度間隔を取ってから

また違うプログラムを実行するようにしたいんですが

検索して調べたのだと

  Sleep (5000)

があったんですが フォームがフリーズしたようになってしまいます

解決策を教えて下さいお願いします
投稿者 YuO  (社会人) 投稿日時 2012/4/25 23:54:45
・タイマーを使う
・BackgroundWorkerを使う
・Taskを使う
・非同期デリゲートを使う
・Threadを使う
あたりでしょうか。

UIスレッドでは,Thread.Sleepなどの時間がかかる処理をしてはいけません。
投稿者 shu  (社会人) 投稿日時 2012/4/26 08:08:51
はずしているかもしれませんが、WebBrowserを使用しているならDocumentCompletedイベントで処理
するといいかも。
投稿者 ヴァン  (社会人) 投稿日時 2012/4/27 11:45:32
こんにちは。

タイマーで5秒待つのが一番シンプルだと思います。
投稿者 仮名@トム  (中学生) 投稿日時 2012/4/28 09:52:06
タイマーで待つにはどうすればいいんですか・・・

タイマーを使った経験が少なすぎて・・・

一つのプログラムを5秒に1回実行する とかはできるんですけど

複数でやるやり方がわかりません 教えてくださいお願いします
投稿者 もちだ  (社会人) 投稿日時 2012/4/28 11:47:30
順次起動していくプログラムの状態を問わないと考えると、
何度目のタイマーイベントであるかが判別できれば事足りるかなぁと今思いました。

実行回数を格納する変数を一つ宣言しておき、ボタン押下でタイマーをスタート。
タイマーイベントが起きる度に1ずつ加算してその変数の値に応じて条件分岐を行い、
起動するプログラムを指定する、とか。

Dim intTimerCnt as Integer = 0


Private Sub Timer1_Tick(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Timer1.Tick
intTimerCnt += 1
Select Case intTimerCnt
    Case 1
        MsgBox("一度目")

    Case 2
        MsgBox("二度目")

    Case 3
        MsgBox("三度目")
End Select
End Sub


目的を果たした後もカウンタの値が増えていき最終的にはオーバーフローするので、
タイマーを止めるなど対応も必要でしょう。
投稿者 仮名@トム  (中学生) 投稿日時 2012/4/28 18:10:02
    Dim intTimerCnt As Integer = 0


    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        intTimerCnt += 1
        Select Case intTimerCnt
            Case 1
                MsgBox("一度目")

            Case 2
                MsgBox("二度目")

            Case 3
                MsgBox("三度目")

                intTimerCnt = 0

        End Select

    End Sub


こんな感じでいいんですかね・・・?
投稿者 もちだ  (社会人) 投稿日時 2012/5/2 09:22:40
実際に動かしてみれば判ると思いますが、カウンタを0に戻すと次のタイマーイベントで+1され、
結果的に1~3をひたすら繰り返すようになります。それで問題なければ良いのですが、
そうでない場合はタイマーを止めたほうがお利口さんかと思います。
Timer1.Stop
投稿者 shu  (社会人) 投稿日時 2012/5/2 09:36:15
> こんな感じでいいんですかね・・・? 
具体的にやりたいことが分からないので
それは仮名@トム   さんにしか分からないです。
教えてもらったことをヒントにいろいろ試してみて
それでも出来なかったこと、さらにわからなかったことを
聞かれると良いかと思います。
投稿者 仮名@トム  (中学生) 投稿日時 2012/5/5 14:29:50
解決しました ありがとうございました