Renish B
Renish B

Reputation: 122

How to trigger an event for the given interval of time repeatedly in c#?

How to schedule the event, for instance I need to call a method which should perform its action for every given seconds. I'm developing simple windows form app, I tried using like

while(true)
{
 methodToBeScheduled();
 Thread.Sleep(60000);
}

This particular piece of code makes my application "Not-responding" while its executing. I hope timer can do this or any other logic that you experts suggest, kindly please let me know.

Thanks!

Upvotes: 0

Views: 940

Answers (4)

Cameron
Cameron

Reputation: 98736

You can use the WinForms timer:

Timer _timer;

// In constructor (or anywhere you want to start the timer, e.g. a button event):
_timer = new Timer();
_timer.Interval = 60000;    // milliseconds
_timer.Tick += (sender, e) => methodToBeScheduled();
_timer.Start();

This will cause methodToBeScheduled to be called once every 60 seconds, roughly. It will be called on the main UI thread, so avoid doing any heavy processing in it.

The advantage of using this timer is that it's built-in, doesn't require thread synchronization, and is simple to use. The disadvantage is that the interval is not exact -- the actual interval will vary depending on what other messages need to be processed in the application, and is also at the mercy of the Windows system clock, which is only accurate to 10-20ms or so.

Upvotes: 2

codeputer
codeputer

Reputation: 2018

Var sequence = Observable.interval(1).publish Sequence.subscribe ....

Will allow to subscribe to an observable that will fire an onnext every second. See reactive extension ..

Hate typing on iPads....

Upvotes: 1

deerchao
deerchao

Reputation: 10534

You can use a Timer(System.Threading.Timer).

using System;
using System.Threading;

Timer _timer = null;


_timer = new Timer(o =>
    {
        methodToBeScheduled();
    });
_timer.Change(TimeSpan.Zero, TimeSpan.FromSeconds(60));

Upvotes: 1

aleph_null
aleph_null

Reputation: 5786

Yes, there are three different types of timers (all of which are named Timer but behave a little different) in .net. The windows.forms timer executes a function at a certain rate--it calls the function from the UI thread. The System.Threading Timer does the same but calls the function from another thread. There is another timer that I can't remember off the top of my head. You will have to pick one of them based on your circumstance.

Threading timer is my favorite. Here is an example if how to use it. Just keep in mind whatever you are calling is not done from the UI thread. May want to use the forms timer or synchronize things if that's an issue.

Upvotes: 0

Related Questions