DOBON.NETプログラミング道掲示板

[ 最新記事及び返信フォームをトピックトップへ ]

■34200 / inTopicNo.1)  System.Threading.Thread.Sleep()と変数
  
□投稿者/ けい 一般人(20回)-(2019/03/31(Sun) 18:32:33)
  • アイコン環境/言語:[Windows10Pro、VB.NET、.NET Framework4.6.1] 
    分類:[.NET] 

    お世話になります。

    フォーム(frmTest)をLoadしてN秒後に自動的に閉じるコードを書いています。

    コードは以下の通りです。

    Private Sub frmTest_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Timer1.Start()
    End Sub

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    Dim intSleepTime As Integer=N * 1000
    System.Threading.Thread.Sleep(intSleepTime)・・・*
    Timer1.Stop()
    Me.Close()
    End Sub

    これだと、例えばN=3秒後を指定しても、1秒も経たないまま一瞬で閉じてしまいます。

    上記の*の部分を、
    System.Threading.Thread.Sleep(3000)とすると、
    3秒後にきちんと閉じます。

    また、
    If N=3 Then
    System.Threading.Thread.Sleep(3000)
    End if

    のようにIf文にすると、うまくいきません。

    Select Case文でもだめでした。

    変数intSleepTimeをLong型にしても、
    Application.DoEvents()をつけても、
    結果は同じでした。

    Nは自由に設定できるようにしたいのですが、
    その場合は変数にしなければなりません。

    こういう仕様なのか、ご教示いただけましたら幸いです。

    どうぞよろしくお願いします。

マルチポストを報告
違反を報告
引用返信 削除キー/
■34201 / inTopicNo.2)  Re[1]: System.Threading.Thread.Sleep()と変数
□投稿者/ Hongliang 大御所(555回)-(2019/03/31(Sun) 18:53:07)
  • アイコンそのNというのはどこで宣言してどこで初期化されているのでしょうか。
    単にNが0なだけではないかという疑いがあります。
    ブレークポイントをSleepの行に設置してブレークさせ、その時のNの値を確認してみて下さい。

    そもそも、タイマを使うのであればThread.Sleepを使う意味はありません。
    (というか、GUIプログラムにおいてメインスレッドでThread.Sleepを使ってはいけません)
    TimerのIntervalを3000ミリ秒とかに設定してからTimerをStartさせれば、
    Tickイベントハンドラ内ではそのままCloseするようにするだけで十分でしょう。
違反を報告
引用返信 削除キー/
■34202 / inTopicNo.3)  Re[2]: System.Threading.Thread.Sleep()と変数
□投稿者/ けい 一般人(21回)-(2019/04/01(Mon) 16:06:32)
  • アイコンNo34201に返信(Hongliangさんの記事)

    ありがとうございます。

    Nに関しましては質問文を簡単にするためにこのような記述になりました。
    実際には、モジュールで、Public変数宣言しておりました。


    > そもそも、タイマを使うのであればThread.Sleepを使う意味はありません。
    > (というか、GUIプログラムにおいてメインスレッドでThread.Sleepを使ってはいけません)

    そうなのですね。

    > TimerのIntervalを3000ミリ秒とかに設定してからTimerをStartさせれば、
    > Tickイベントハンドラ内ではそのままCloseするようにするだけで十分でしょう。

    Sleepを中止。

    フォームロード時に、Interval=N*1000、Timerスタート。
    TickイベントでTimerストップ、クローズ。

    で、できました。

    ありがとうございました。
解決み!
違反を報告
引用返信 削除キー/



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

このトピックに書きこむ

Mode/  Pass/


- Child Tree -