Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. .NET (Core and Framework)
  4. [VB.NET 2008] A runtime created Timer doesn't work

[VB.NET 2008] A runtime created Timer doesn't work

Scheduled Pinned Locked Moved .NET (Core and Framework)
csharpsysadminsecurity
18 Posts 3 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • P Pete OHanlon

    Ah. In that case, I would probably look at using System.Threading.Timer instead. Documentation[^]

    Chill _Maxxx_
    CodeStash - Online Snippet Management | My blog | MoXAML PowerToys | Mole 2010 - debugging made easier

    S Offline
    S Offline
    steve_9496613
    wrote on last edited by
    #6

    Sorry but I don't know how to use this kind of timer in the way I need (property of an object). Any other suggestions about how to make a System.Windows.Forms.Timer work as I need? Thanks

    P 1 Reply Last reply
    0
    • S steve_9496613

      Sorry but I don't know how to use this kind of timer in the way I need (property of an object). Any other suggestions about how to make a System.Windows.Forms.Timer work as I need? Thanks

      P Offline
      P Offline
      Pete OHanlon
      wrote on last edited by
      #7

      Put a breakpoint in your timer tick event and see if it's being hit when you run it in debug. Does it hit the method or not? My suspicion is that it is hitting the method, but there's a bug in the if statement.

      Chill _Maxxx_
      CodeStash - Online Snippet Management | My blog | MoXAML PowerToys | Mole 2010 - debugging made easier

      S 1 Reply Last reply
      0
      • P Pete OHanlon

        Put a breakpoint in your timer tick event and see if it's being hit when you run it in debug. Does it hit the method or not? My suspicion is that it is hitting the method, but there's a bug in the if statement.

        Chill _Maxxx_
        CodeStash - Online Snippet Management | My blog | MoXAML PowerToys | Mole 2010 - debugging made easier

        S Offline
        S Offline
        steve_9496613
        wrote on last edited by
        #8

        I put a breakpoint on line

        If ((DateTime.Now.Ticks - mStartSession) > (CGlobali.WebSessionDuration * 10000000)) Then

        but the debug never stop there

        P 1 Reply Last reply
        0
        • S steve_9496613

          I put a breakpoint on line

          If ((DateTime.Now.Ticks - mStartSession) > (CGlobali.WebSessionDuration * 10000000)) Then

          but the debug never stop there

          P Offline
          P Offline
          Pete OHanlon
          wrote on last edited by
          #9

          And if you set the breakpoint in SetWUser? Is it actually executing this line?

          CType(CGlobali.Users.Item(i), CWebUser).WUTimer.Enabled = True

          Chill _Maxxx_
          CodeStash - Online Snippet Management | My blog | MoXAML PowerToys | Mole 2010 - debugging made easier

          S 1 Reply Last reply
          0
          • S steve_9496613

            Hi everybody, my application runs on WinCE 5 device, it communicates with a PLC via modbus/TCP and it integrates a web server (code found in the article "Create your own Web Server using C#"). I'm trying to manage the remote access (from web browser) with user authentication and session timeout. Every user is an object of the following class:

            Public Class CWebUser

            Private mUserName As String = "" 'nome utente
            Private mPassword As String = "" 'MD5 della password
            Private mIP As String = "" 'IP di provenienza della connessione
            Private mStartSession As Long = 0 'istante di inizio della connessione come ticks
            Private mLogged As Boolean = False 'flag per sapere se l'utente è loggato
            Private WithEvents mWUTimer As System.Windows.Forms.Timer 'timer per gestire la durata della connessione

            Sub New()
            mWUTimer = New System.Windows.Forms.Timer()
            mWUTimer.Enabled = False
            mWUTimer.Interval = 10000
            AddHandler (mWUTimer.Tick), AddressOf WUTimer_Tick
            End Sub

            Private Sub WUTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
            If ((DateTime.Now.Ticks - mStartSession) > (CGlobali.WebSessionDuration * 10000000)) Then
            mWUTimer.Enabled = False
            mIP = ""
            mLogged = False
            End If
            End Sub

            Public Property UserName() As String
            Get
            Return mUserName
            End Get
            Set(ByVal value As String)
            mUserName = value
            End Set
            End Property

            Public Property Password() As String
            Get
            Return mPassword
            End Get
            Set(ByVal value As String)
            mPassword = value
            End Set
            End Property

            Public Property IP() As String
            Get
            Return mIP
            End Get
            Set(ByVal value As String)
            mIP = value
            End Set
            End Property

            Public Property StartSession() As Long
            Get
            Return mStartSession
            End Get
            Set(ByVal value As Long)
            mStartSession = value
            End Set
            End Property

            Public Property Logged() As Boolean
            Get
            Return mLogged
            End Get
            Set(ByVal value As Boolean)
            mLogged = value
            End Set
            End Property

            Public Property WUTimer() As System.Windows.Forms.Timer
            Get
            Return mWUTimer
            End Get
            Set(ByVal value As System.Windows.Forms.Timer)
            mWUTimer = value
            End Set
            End Property

            End Class

            When the application starts, it creates a list of authorized users. When someone logs in, if UserName and Password

            L Offline
            L Offline
            Lost User
            wrote on last edited by
            #10

            steve_9496613 wrote:

            mWUTimer = New System.Windows.Forms.Timer()

            According to the documentation[^], that class isn't supported. The Threading-timer[^] seems to be supported.

            Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^]

            S 1 Reply Last reply
            0
            • P Pete OHanlon

              And if you set the breakpoint in SetWUser? Is it actually executing this line?

              CType(CGlobali.Users.Item(i), CWebUser).WUTimer.Enabled = True

              Chill _Maxxx_
              CodeStash - Online Snippet Management | My blog | MoXAML PowerToys | Mole 2010 - debugging made easier

              S Offline
              S Offline
              steve_9496613
              wrote on last edited by
              #11

              yes, the line is executed and the property WUTimer.Enabled is really set to true, to check it I wrote just after that line something like this:

              Dim aaa As Boolean
              aaa = CType(CGlobali.Users.Item(i), CWebUser).WUTimer.Enabled

              and aaa become true. It seems like the instruction

              AddHandler (mWUTimer.Tick), AddressOf WUTimer_Tick

              does not link the sub WUTimer_Tick to the event mWUTimer.Tick

              P 1 Reply Last reply
              0
              • L Lost User

                steve_9496613 wrote:

                mWUTimer = New System.Windows.Forms.Timer()

                According to the documentation[^], that class isn't supported. The Threading-timer[^] seems to be supported.

                Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^]

                S Offline
                S Offline
                steve_9496613
                wrote on last edited by
                #12

                Hi Eddy, thanks for the replay. Your link to the documentation about the System.Windows.Forms.Timer refers to .Net Framework 4.5 but, for this time, I'm luky and in Compact Framework 3.5 (and also .NET Framework 3.5) this timer is supported. The System.Threading.Timer is supported, as Pete O'Hanlon suggested, but I have some problem to put one of this timer in my class as a property (I mean like I did with the Form.Timer).

                L 1 Reply Last reply
                0
                • S steve_9496613

                  Hi Eddy, thanks for the replay. Your link to the documentation about the System.Windows.Forms.Timer refers to .Net Framework 4.5 but, for this time, I'm luky and in Compact Framework 3.5 (and also .NET Framework 3.5) this timer is supported. The System.Threading.Timer is supported, as Pete O'Hanlon suggested, but I have some problem to put one of this timer in my class as a property (I mean like I did with the Form.Timer).

                  L Offline
                  L Offline
                  Lost User
                  wrote on last edited by
                  #13

                  steve_9496613 wrote:

                  Your link to the documentation about the System.Windows.Forms.Timer refers to .Net Framework 4.5

                  Only for the member-listing; you can select the version with a dropdown at the top. The "version information" and "platform" heading isn't limited to .NET 4.5 - it simply lists where this class is supported.

                  steve_9496613 wrote:

                  Compact Framework 3.5 (and also .NET Framework 3.5) this timer is supported.

                  Not according to MSDN.

                  Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^]

                  S 1 Reply Last reply
                  0
                  • L Lost User

                    steve_9496613 wrote:

                    Your link to the documentation about the System.Windows.Forms.Timer refers to .Net Framework 4.5

                    Only for the member-listing; you can select the version with a dropdown at the top. The "version information" and "platform" heading isn't limited to .NET 4.5 - it simply lists where this class is supported.

                    steve_9496613 wrote:

                    Compact Framework 3.5 (and also .NET Framework 3.5) this timer is supported.

                    Not according to MSDN.

                    Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^]

                    S Offline
                    S Offline
                    steve_9496613
                    wrote on last edited by
                    #14

                    I'm sure you're right but the page http://msdn.microsoft.com/en-us/library/system.windows.forms.timer%28v=vs.90%29.aspx[^] is different from the page http://msdn.microsoft.com/en-us/library/system.windows.forms.timer%28v=vs.110%29.aspx[^] and the Version Information at the bottom of the pages are different. In my application I use some System.Windows.Forms.Timer and they work fine. I will try not to make it known to MSDN...

                    L 1 Reply Last reply
                    0
                    • S steve_9496613

                      I'm sure you're right but the page http://msdn.microsoft.com/en-us/library/system.windows.forms.timer%28v=vs.90%29.aspx[^] is different from the page http://msdn.microsoft.com/en-us/library/system.windows.forms.timer%28v=vs.110%29.aspx[^] and the Version Information at the bottom of the pages are different. In my application I use some System.Windows.Forms.Timer and they work fine. I will try not to make it known to MSDN...

                      L Offline
                      L Offline
                      Lost User
                      wrote on last edited by
                      #15

                      steve_9496613 wrote:

                      I'm sure you're right but

                      ..but I wasn't :-D Yes, that happens too.

                      Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^]

                      1 Reply Last reply
                      0
                      • S steve_9496613

                        yes, the line is executed and the property WUTimer.Enabled is really set to true, to check it I wrote just after that line something like this:

                        Dim aaa As Boolean
                        aaa = CType(CGlobali.Users.Item(i), CWebUser).WUTimer.Enabled

                        and aaa become true. It seems like the instruction

                        AddHandler (mWUTimer.Tick), AddressOf WUTimer_Tick

                        does not link the sub WUTimer_Tick to the event mWUTimer.Tick

                        P Offline
                        P Offline
                        Pete OHanlon
                        wrote on last edited by
                        #16

                        Try changing your class so that it looks like this:

                        Public Class CWebUser

                        Private mUserName As String = "" 'nome utente
                        Private mPassword As String = "" 'MD5 della password
                        Private mIP As String = "" 'IP di provenienza della connessione
                        Private mStartSession As Long = 0 'istante di inizio della connessione come ticks
                        Private mLogged As Boolean = False 'flag per sapere se l'utente è loggato
                        Private WithEvents mWUTimer As System.Windows.Forms.Timer 'timer per gestire la durata della connessione

                        Sub New()
                        End Sub

                        Private Sub WUTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
                        If ((DateTime.Now.Ticks - mStartSession) > (CGlobali.WebSessionDuration * 10000000)) Then
                        mWUTimer.Enabled = False
                        mIP = ""
                        mLogged = False
                        End If
                        End Sub

                        Public Property UserName() As String
                        Get
                        Return mUserName
                        End Get
                        Set(ByVal value As String)
                        mUserName = value
                        End Set
                        End Property

                        Public Property Password() As String
                        Get
                        Return mPassword
                        End Get
                        Set(ByVal value As String)
                        mPassword = value
                        End Set
                        End Property

                        Public Property IP() As String
                        Get
                        Return mIP
                        End Get
                        Set(ByVal value As String)
                        mIP = value
                        End Set
                        End Property

                        Public Property StartSession() As Long
                        Get
                        Return mStartSession
                        End Get
                        Set(ByVal value As Long)
                        mStartSession = value
                        End Set
                        End Property

                        Public Property Logged() As Boolean
                        Get
                        Return mLogged
                        End Get
                        Set(ByVal value As Boolean)
                        mLogged = value
                        End Set
                        End Property

                        Public Property WUTimer() As System.Windows.Forms.Timer
                        Get
                        Return mWUTimer
                        End Get
                        Set(ByVal value As System.Windows.Forms.Timer)
                        mWUTimer = value
                        End Set
                        End Property

                        Public Sub EnableTimer(Byval IpAddress As String, ByVal Name As String)
                        IP = IpAddress
                        UserName = Name
                        mWUTimer = New System.Windows.Forms.Timer()
                        mWUTimer.Interval = 10000
                        AddHandler (mWUTimer.Tick), AddressOf WUTimer_Tick
                        mWUTimer.Enabled = True
                        End Sub
                        End Class

                        Then call EnableTimer from your loop.

                        Chill _Maxxx_
                        CodeStash - Online Snippet Management | My blog |

                        S 1 Reply Last reply
                        0
                        • P Pete OHanlon

                          Try changing your class so that it looks like this:

                          Public Class CWebUser

                          Private mUserName As String = "" 'nome utente
                          Private mPassword As String = "" 'MD5 della password
                          Private mIP As String = "" 'IP di provenienza della connessione
                          Private mStartSession As Long = 0 'istante di inizio della connessione come ticks
                          Private mLogged As Boolean = False 'flag per sapere se l'utente è loggato
                          Private WithEvents mWUTimer As System.Windows.Forms.Timer 'timer per gestire la durata della connessione

                          Sub New()
                          End Sub

                          Private Sub WUTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
                          If ((DateTime.Now.Ticks - mStartSession) > (CGlobali.WebSessionDuration * 10000000)) Then
                          mWUTimer.Enabled = False
                          mIP = ""
                          mLogged = False
                          End If
                          End Sub

                          Public Property UserName() As String
                          Get
                          Return mUserName
                          End Get
                          Set(ByVal value As String)
                          mUserName = value
                          End Set
                          End Property

                          Public Property Password() As String
                          Get
                          Return mPassword
                          End Get
                          Set(ByVal value As String)
                          mPassword = value
                          End Set
                          End Property

                          Public Property IP() As String
                          Get
                          Return mIP
                          End Get
                          Set(ByVal value As String)
                          mIP = value
                          End Set
                          End Property

                          Public Property StartSession() As Long
                          Get
                          Return mStartSession
                          End Get
                          Set(ByVal value As Long)
                          mStartSession = value
                          End Set
                          End Property

                          Public Property Logged() As Boolean
                          Get
                          Return mLogged
                          End Get
                          Set(ByVal value As Boolean)
                          mLogged = value
                          End Set
                          End Property

                          Public Property WUTimer() As System.Windows.Forms.Timer
                          Get
                          Return mWUTimer
                          End Get
                          Set(ByVal value As System.Windows.Forms.Timer)
                          mWUTimer = value
                          End Set
                          End Property

                          Public Sub EnableTimer(Byval IpAddress As String, ByVal Name As String)
                          IP = IpAddress
                          UserName = Name
                          mWUTimer = New System.Windows.Forms.Timer()
                          mWUTimer.Interval = 10000
                          AddHandler (mWUTimer.Tick), AddressOf WUTimer_Tick
                          mWUTimer.Enabled = True
                          End Sub
                          End Class

                          Then call EnableTimer from your loop.

                          Chill _Maxxx_
                          CodeStash - Online Snippet Management | My blog |

                          S Offline
                          S Offline
                          steve_9496613
                          wrote on last edited by
                          #17

                          Thanks for your effort. I did what you suggest but the result is the same: the tick event is not fired. I fear it can be a problem related to thread. The web server is a class with a thread that start the listener to receive connections from remote. In the main thread of the application I instantiate an object WebServer and in this way I start its thread (the thread is created and started in the sub New() of the class). The list of users (objects of the class CWebUser) is created in the main thread of the application. The sub SetWUser(...) that enable the WUTimer is part of the class of the web server and is called by the function VerifyLogInData(...) called in the loop of the thread of the web server... Is it possible that the problem is that I try to use from thread X a method of an object created in thread Y?

                          S 1 Reply Last reply
                          0
                          • S steve_9496613

                            Thanks for your effort. I did what you suggest but the result is the same: the tick event is not fired. I fear it can be a problem related to thread. The web server is a class with a thread that start the listener to receive connections from remote. In the main thread of the application I instantiate an object WebServer and in this way I start its thread (the thread is created and started in the sub New() of the class). The list of users (objects of the class CWebUser) is created in the main thread of the application. The sub SetWUser(...) that enable the WUTimer is part of the class of the web server and is called by the function VerifyLogInData(...) called in the loop of the thread of the web server... Is it possible that the problem is that I try to use from thread X a method of an object created in thread Y?

                            S Offline
                            S Offline
                            steve_9496613
                            wrote on last edited by
                            #18

                            Yes it is... I have solved the problem enabling the timer from a sub in the main thread and colling this sub with the Invoke function from the web server thread. Bye!

                            1 Reply Last reply
                            0
                            Reply
                            • Reply as topic
                            Log in to reply
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes


                            • Login

                            • Don't have an account? Register

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • World
                            • Users
                            • Groups