none
關於 VB2012 WindowForm 的 Timer RRS feed

  • 問題

  • 以下這是一個可以執行的Timer專案:

    Public Class Form1
        Dim FormTimer As New Windows.Forms.Timer
        Dim iTickTimes As Integer = 1

        Private Sub BTN_FrmT_start_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_FrmT_start.Click
            FormTimer.Interval = CDbl(TimeInterval.Text)
            AddHandler FormTimer.Tick, AddressOf myTimerTick02 'Form timer
            FormTimer.Start()
        End Sub

        Private Sub myTimerTick02(ByVal sender As System.Object, ByVal e As System.EventArgs)
            Dim imyTicks As Integer
            imyTicks = iTickTimes
            iTickTimes += 1

            'For i As Integer = 0 To 1
            '    System.Threading.Thread.Sleep(1)
            'Next
            'Application.DoEvents()

            If iTickTimes Mod 10 = 1 Then
                TB_F.Text &= "#" & imyTicks & " Tick Begin:" & Environment.TickCount & vbCrLf
                TB_F.Text &= "#" & imyTicks & " Tick End:" & Environment.TickCount & vbCrLf
            End If

        End Sub
        Private Sub BTN_FrmT_stop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_FrmT_stop.Click
            FormTimer.Stop()
            TB_F.Text &= "Stop:" & Environment.TickCount & vbCrLf

        End Sub
        Private Sub BTN_Clear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_Clear.Click
            TB_F.Clear()
            iTickTimes = 1
        End Sub
    End Class

    各位先進您們好,我想請教的問題是,有關上述程式碼中註解掉的四句有跟沒有的差別是什麼呢?

    System.Threading.Thread.Sleep(1) 的意思是讓整個程式修習1ms嗎?我不太懂,而且把它註解掉好像對於結果也沒有差別。

    另外是Application.DoEvents(),在MSDN Timer的範例中有使用到它,可是我把它註解掉之後好像也不會影響到結果,請問它的功能是在哪裡呢?

    最後一個問題是關於執行的結果,不論我先把Interval設定多少,例如設為10ms並計時10秒鐘

    (我設定讓它每計次10次才顯是一次)

    雖然Environment.TickCount它輸出Stop值-Beagin值均近似10秒鐘,但若我進行10次實驗,則iTickTimes所計到的次數以及計次的間隔時間卻不一定會相同

    我執行10次的結果中出現比較多的情況是間隔為15.6ms而總次數約為640次,但有的時後卻感覺是隨機的間隔與次數

    就我理解到的來說,如果我設定Interval為10ms,計時10秒鐘,我得到的結果應該是計次了約1000次然後每次顯示的間隔約為100ms才對阿...

    然後我又測試了Interval=100ms的情況,結果也雷同,比較多的情況是間隔546ms然後約180次,但次數和間隔時間卻又可能隨著每次執行而不一樣,這個問題非常困擾我,是我使用了錯誤的方法嗎?如果是這樣,我想請教如果我想設計一個利用Timer計次來正確計時的程式該怎麼做呢?謝謝。

    再次感謝!

    2014年4月9日 上午 08:32

解答

  • http://www.dotblogs.com.tw/billchung/archive/2009/04/18/8044.aspx

    http://www.dotblogs.com.tw/billchung/archive/2009/04/19/8052.aspx

    http://www.dotblogs.com.tw/billchung/archive/2009/05/03/8277.aspx


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2014年4月9日 上午 09:18
    版主
  • 時間人補遺

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2014年4月9日 上午 10:07
    版主
  • 你後半段要的功能:[VBNET]定時整點動作


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2014年4月9日 下午 02:26

所有回覆

  • http://www.dotblogs.com.tw/billchung/archive/2009/04/18/8044.aspx

    http://www.dotblogs.com.tw/billchung/archive/2009/04/19/8052.aspx

    http://www.dotblogs.com.tw/billchung/archive/2009/05/03/8277.aspx


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2014年4月9日 上午 09:18
    版主
  • System.Threading.Thread.Sleep(1)和Application.DoEvents都可以釋放控制權, 讓其他的執行有機會執行, 一般用在執行緒控制, 如果Tick事件處理程序中的迴圈只會執行不多的次數, 加不加的效果差別不大

    如果您要計時的是程式執行花掉的時間可以考慮使用Stopwatch類別

    2014年4月9日 上午 09:33
  • 時間人補遺

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2014年4月9日 上午 10:07
    版主
  • 這篇有說到原因與細節:VB6/VBNET CPU 資源釋出


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2014年4月9日 下午 02:23
  • 你後半段要的功能:[VBNET]定時整點動作


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2014年4月9日 下午 02:26
  • 請問你的問題解決了嗎 ?  請不要忘記回應或標示自己的發問

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2014年4月17日 上午 06:20
    版主