none
timer 오동작 관련 질문 RRS feed

  • 질문

  •  현재 Timer를 여러개 30개 정도 사용을 하고 있습니다.

     Interval = 500 Or 1000 으로 사용을 하고 있는데 . Timer  이벤트가 1초에 한번씩 발생되어야 하나

     4~5초간격으로 발생합니다.  도저히 원인을 모르겠습니다.

    2013년 1월 21일 월요일 오전 3:39

답변

  • 안녕하세요.
    VB MVP 고성만 입니다.

    아래와 같은 방법으로

    1초에 한번씩 메세지를 띄울수 있습니다. (1초당 설정 : Timer1.Interval = 1000)

     
    컨트롤 : 텍스트박스, 라벨, 타이머 (각1)

     

    Public Class Form1
        Dim cnt As Integer = 1
        Dim tmpStr As String
    
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            If cnt <= 5 Then
                tmpStr = tmpStr & Now & " TEST:" & cnt & vbCrLf
                cnt = cnt + 1
                TextBox1.Text = CInt(TextBox1.Text) - 1
    
            Else
                Timer1.Stop()
                MsgBox(tmpStr)
                End
    
            End If
    
        End Sub
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Timer1.Interval = 1000
            Timer1.Start()
            TextBox1.Text = 5
        End Sub
    End Class
    

    Timer1.Interval = 1000

    1초가 맞습니다.

    타이머의 Start / Stop 등의 상관관계에 문제가 없는지 확인바랍니다.

    메세지 출력시 예제처럼, Now 함수를 사용해서 출력시간을 확인하실수 있습니다.

    아래의 제 블로그에도 동일글을 게시하였습니다.

    http://racer42.tistory.com/39

    잘 안되시면, 소스를 보여주시면 빠른 해결에 도움될것 같습니다.

    감사합니다.


    VB/VB.NET is my Life

    2013년 1월 21일 월요일 오전 9:09

모든 응답

  • 일반적인 Timer사용시 1초를 위한 Interval 값은 = 1000으로 설정합니다.

    현재 사용하고 계신 프로그램에서 아래 예제를 돌려보시기 바랍니다.

    Imports System
    Imports System.Timers
    
    Public Class Timer1
        
        Public Shared Sub Main()
            ' Normally, the timer is declared at the class level, so
            ' that it doesn't go out of scope when the method ends.
            ' In this example, the timer is needed only while Main 
            ' is executing. However, KeepAlive must be used at the
            ' end of Main, to prevent the JIT compiler from allowing 
            ' aggressive garbage collection to occur before Main 
            ' ends.
            Dim aTimer As New System.Timers.Timer()
    
            ' Hook up the Elapsed event for the timer.
            AddHandler aTimer.Elapsed, AddressOf OnTimedEvent
    
            ' Set the Interval to 2 seconds (2000 milliseconds).
            aTimer.Interval = 2000
            aTimer.Enabled = True
            
            Console.WriteLine("Press the Enter key to exit the program.")
            Console.ReadLine()
    
            ' Keep the timer alive until the end of Main.
            GC.KeepAlive(aTimer)
        End Sub
            
        ' Specify what you want to happen when the Elapsed event is 
        ' raised.
        Private Shared Sub OnTimedEvent(source As Object, e As ElapsedEventArgs)
            Console.WriteLine("Hello World!")
        End Sub
    End Class

    제시해 드린 답변이 도움이 되었기를 바랍니다.

    답변이 문제 해결에 도움이 되었다면 답변으로 채택을 부탁드립니다.
    하지만 문제 해결이 되지 않아서 정확한 답변을 원하는 경우에는 문제의 정보를 더 자세하게 답변으로 제공해주시기 바랍니다.
    2013년 1월 21일 월요일 오전 5:16
    중재자
  • 안녕하세요.
    VB MVP 고성만 입니다.

    아래와 같은 방법으로

    1초에 한번씩 메세지를 띄울수 있습니다. (1초당 설정 : Timer1.Interval = 1000)

     
    컨트롤 : 텍스트박스, 라벨, 타이머 (각1)

     

    Public Class Form1
        Dim cnt As Integer = 1
        Dim tmpStr As String
    
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            If cnt <= 5 Then
                tmpStr = tmpStr & Now & " TEST:" & cnt & vbCrLf
                cnt = cnt + 1
                TextBox1.Text = CInt(TextBox1.Text) - 1
    
            Else
                Timer1.Stop()
                MsgBox(tmpStr)
                End
    
            End If
    
        End Sub
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Timer1.Interval = 1000
            Timer1.Start()
            TextBox1.Text = 5
        End Sub
    End Class
    

    Timer1.Interval = 1000

    1초가 맞습니다.

    타이머의 Start / Stop 등의 상관관계에 문제가 없는지 확인바랍니다.

    메세지 출력시 예제처럼, Now 함수를 사용해서 출력시간을 확인하실수 있습니다.

    아래의 제 블로그에도 동일글을 게시하였습니다.

    http://racer42.tistory.com/39

    잘 안되시면, 소스를 보여주시면 빠른 해결에 도움될것 같습니다.

    감사합니다.


    VB/VB.NET is my Life

    2013년 1월 21일 월요일 오전 9:09