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. C#
  4. Timer CallBack function

Timer CallBack function

Scheduled Pinned Locked Moved C#
helptutorial
13 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.
  • A Offline
    A Offline
    aruna_koride
    wrote on last edited by
    #1

    Please look at the code: I am using three such timer and callback functions,but it seems timers are always running when I close application also. timer = new System.Threading.Timer(new TimerCallback(OnNextMinute), null, Timeout.Infinite, Timeout.Infinite); timer.Start() public void onNextMinute() { } ~Class { timer.dispose(); } How to make sure that it stops running when my app is closed. appreciate immediate help as it is urgent. Thanks in advance,

    C G 2 Replies Last reply
    0
    • A aruna_koride

      Please look at the code: I am using three such timer and callback functions,but it seems timers are always running when I close application also. timer = new System.Threading.Timer(new TimerCallback(OnNextMinute), null, Timeout.Infinite, Timeout.Infinite); timer.Start() public void onNextMinute() { } ~Class { timer.dispose(); } How to make sure that it stops running when my app is closed. appreciate immediate help as it is urgent. Thanks in advance,

      C Offline
      C Offline
      Christian Graus
      wrote on last edited by
      #2

      Use the windows timer instead of the threading one. Have your window closed event call Stop on the timers. Either of those things should work. If your timer is still going, then your app is still running.

      Christian Graus - Microsoft MVP - C++ Metal Musings - Rex and my new metal blog

      1 Reply Last reply
      0
      • A aruna_koride

        Please look at the code: I am using three such timer and callback functions,but it seems timers are always running when I close application also. timer = new System.Threading.Timer(new TimerCallback(OnNextMinute), null, Timeout.Infinite, Timeout.Infinite); timer.Start() public void onNextMinute() { } ~Class { timer.dispose(); } How to make sure that it stops running when my app is closed. appreciate immediate help as it is urgent. Thanks in advance,

        G Offline
        G Offline
        Guffa
        wrote on last edited by
        #3

        There is no guarantee that the finalizer (~) will be run when the application ends. The finalizer is called after that the garbage collector has recognised that the object isn't used any more. An object with a finalizer is placed in a queue where a background thread will be calling the finalizer, but as your object is still used when the application ends, it will never make the queue. As you have a resource that needs to be freed, you should implement the IDisposable interface so that you can call the Dispose method on the object to free the resources. Just as you are calling the Dispose method of the Timer object to make it free it's resources.

        --- single minded; short sighted; long gone;

        A 2 Replies Last reply
        0
        • G Guffa

          There is no guarantee that the finalizer (~) will be run when the application ends. The finalizer is called after that the garbage collector has recognised that the object isn't used any more. An object with a finalizer is placed in a queue where a background thread will be calling the finalizer, but as your object is still used when the application ends, it will never make the queue. As you have a resource that needs to be freed, you should implement the IDisposable interface so that you can call the Dispose method on the object to free the resources. Just as you are calling the Dispose method of the Timer object to make it free it's resources.

          --- single minded; short sighted; long gone;

          A Offline
          A Offline
          aruna_koride
          wrote on last edited by
          #4

          Thanks a lot for prompt replies,I will try to dispose the timer first to stop app from running..

          1 Reply Last reply
          0
          • G Guffa

            There is no guarantee that the finalizer (~) will be run when the application ends. The finalizer is called after that the garbage collector has recognised that the object isn't used any more. An object with a finalizer is placed in a queue where a background thread will be calling the finalizer, but as your object is still used when the application ends, it will never make the queue. As you have a resource that needs to be freed, you should implement the IDisposable interface so that you can call the Dispose method on the object to free the resources. Just as you are calling the Dispose method of the Timer object to make it free it's resources.

            --- single minded; short sighted; long gone;

            A Offline
            A Offline
            aruna_koride
            wrote on last edited by
            #5

            I implemented IDisposable interface , but still not able to release resources. I am trying to dispose the timer in Dispose Method and calling the Dispose Method in the Main Class event where I want to end the application. But my app is crashed at the Dispose Method with StackOverflowException at timer.Dispose(). Please help me...

            G 1 Reply Last reply
            0
            • A aruna_koride

              I implemented IDisposable interface , but still not able to release resources. I am trying to dispose the timer in Dispose Method and calling the Dispose Method in the Main Class event where I want to end the application. But my app is crashed at the Dispose Method with StackOverflowException at timer.Dispose(). Please help me...

              G Offline
              G Offline
              Guffa
              wrote on last edited by
              #6

              A stack overflow usually means that you have "accomplished" an infinite recursive call. What does your code look like?

              --- single minded; short sighted; long gone;

              A 1 Reply Last reply
              0
              • G Guffa

                A stack overflow usually means that you have "accomplished" an infinite recursive call. What does your code look like?

                --- single minded; short sighted; long gone;

                A Offline
                A Offline
                aruna_koride
                wrote on last edited by
                #7

                I am just giving part of code ,main function of this class is when the user request a file to download, file is broken into chunks,the chunks are added to PendingChunks,the PendingChunks are updated in timer ,the callBack function gets the ChunkAddress of the requested pendingchunks from the server . public Class:IDisposable { Class{ ArrayList PendingChunks=new ArrayList(); timer2 = new System.Threading.Timer(new TimerCallback(getAddressfromServer), null, Timeout.Infinite, Timeout.Infinite); StartTimer(); } public void getAddressfromServer(object state) { getChunkAddress(PendingChunks) } const long TIMER_INTERVAL = 10000L; private void StartTimer() { timer.Change(0, TIMER_INTERVAL); } } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (!disposed) { if (disposing) { timer.dispose(); } disposed = true; } } public void getChunkAddress(ArrayList chnkList) { ArrayList chnkAddrList=null; Chunk c=null; ChunkAddress chnkAdd; chnkAddrList = HTTPClass.httpGetChunks(chnkList); if (chnkAddrList != null) { for (int j = 0; j < chnkList.Count; j++) { c = (Chunk)chnkList[j]; for (int i = 0; i < chnkAddrList.Count; i++) { c.chnkAddress = (ChunkAddress)chnkAddrList[i]; } } }

                G 1 Reply Last reply
                0
                • A aruna_koride

                  I am just giving part of code ,main function of this class is when the user request a file to download, file is broken into chunks,the chunks are added to PendingChunks,the PendingChunks are updated in timer ,the callBack function gets the ChunkAddress of the requested pendingchunks from the server . public Class:IDisposable { Class{ ArrayList PendingChunks=new ArrayList(); timer2 = new System.Threading.Timer(new TimerCallback(getAddressfromServer), null, Timeout.Infinite, Timeout.Infinite); StartTimer(); } public void getAddressfromServer(object state) { getChunkAddress(PendingChunks) } const long TIMER_INTERVAL = 10000L; private void StartTimer() { timer.Change(0, TIMER_INTERVAL); } } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (!disposed) { if (disposing) { timer.dispose(); } disposed = true; } } public void getChunkAddress(ArrayList chnkList) { ArrayList chnkAddrList=null; Chunk c=null; ChunkAddress chnkAdd; chnkAddrList = HTTPClass.httpGetChunks(chnkList); if (chnkAddrList != null) { for (int j = 0; j < chnkList.Count; j++) { c = (Chunk)chnkList[j]; for (int i = 0; i < chnkAddrList.Count; i++) { c.chnkAddress = (ChunkAddress)chnkAddrList[i]; } } }

                  G Offline
                  G Offline
                  Guffa
                  wrote on last edited by
                  #8

                  The code that you show looks basically correct. I can't say anything about the actual code that you use, as you won't show it. Where do you dispose the object?

                  --- single minded; short sighted; long gone;

                  A 2 Replies Last reply
                  0
                  • G Guffa

                    The code that you show looks basically correct. I can't say anything about the actual code that you use, as you won't show it. Where do you dispose the object?

                    --- single minded; short sighted; long gone;

                    A Offline
                    A Offline
                    aruna_koride
                    wrote on last edited by
                    #9

                    I am disposing the timer in public void virtual Dispose Method

                    1 Reply Last reply
                    0
                    • G Guffa

                      The code that you show looks basically correct. I can't say anything about the actual code that you use, as you won't show it. Where do you dispose the object?

                      --- single minded; short sighted; long gone;

                      A Offline
                      A Offline
                      aruna_koride
                      wrote on last edited by
                      #10

                      Sorry I have no idea how to dispose the object, can u please tell me?

                      G 1 Reply Last reply
                      0
                      • A aruna_koride

                        Sorry I have no idea how to dispose the object, can u please tell me?

                        G Offline
                        G Offline
                        Guffa
                        wrote on last edited by
                        #11

                        aruna_koride wrote:

                        Sorry I have no idea how to dispose the object, can u please tell me?

                        You just call the Dispose method. This should usually be done by the object that contains the reference to the object to dispose. If you for instance have put the object in a form, that form would call Dispose on the object when the form is closing.

                        --- single minded; short sighted; long gone;

                        A 1 Reply Last reply
                        0
                        • G Guffa

                          aruna_koride wrote:

                          Sorry I have no idea how to dispose the object, can u please tell me?

                          You just call the Dispose method. This should usually be done by the object that contains the reference to the object to dispose. If you for instance have put the object in a form, that form would call Dispose on the object when the form is closing.

                          --- single minded; short sighted; long gone;

                          A Offline
                          A Offline
                          aruna_koride
                          wrote on last edited by
                          #12

                          As you said I have a recursive loop because I am not stopping to get Chunk Address untill I cleared the PendingChunks ArrayList,may be that is Cause? Yes I have Called Dispose method in an another class ,triggered by Application Shutdown event of Form, like this: using(Class1 c=new Class1) { c.Dispose(); } Is it correct? Do I need to use using method?or just call Dispose Method?

                          G 1 Reply Last reply
                          0
                          • A aruna_koride

                            As you said I have a recursive loop because I am not stopping to get Chunk Address untill I cleared the PendingChunks ArrayList,may be that is Cause? Yes I have Called Dispose method in an another class ,triggered by Application Shutdown event of Form, like this: using(Class1 c=new Class1) { c.Dispose(); } Is it correct? Do I need to use using method?or just call Dispose Method?

                            G Offline
                            G Offline
                            Guffa
                            wrote on last edited by
                            #13

                            aruna_koride wrote:

                            Yes I have Called Dispose method in an another class ,triggered by Application Shutdown event of Form, like this: using(Class1 c=new Class1) { c.Dispose(); }

                            Then you are creating a new object and dispose that, that doesn't dispose the object that you use in the rest of the code.

                            --- single minded; short sighted; long gone;

                            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