Effortless time tracking to help you lead a more rewarding work-life.
Increase efficiency
Quantify distractions and maximize billable hours.
Be more productive
We'll see in the next section how to schedule a task at a given date and time. Note that if we are running this is a JUnit test, we should add a Thread.sleep(delay. 2) call to allow the Timer's thread to run the task before the Junit test stops executing. Countdown timers (and appropriate scheduling) help you stay on-task and avoid costly multi-tasking. Giving yourself only a set amount of time to complete a project isn’t about pressuring yourself to work an unhealthy pace and make a lot of mistakes. By setting proper amounts of time for each task, you’re setting yourself free. The Emergent Task Planner (ETP) is a paper-based daily planning sheet designed to keep you focused in the face of chaos. Start the day by declaring what you want to get done, and the ETP helps you stick to the plan by with task, time, and scheduling support. Pomofocus is a customizable pomodoro timer that works on desktop & mobile browser. The aim of this app is to help you focus on any task you are working on, such as study, writing, or coding. This app is inspired by Pomodoro Technique which is a time management method developed by Francesco Cirillo. What is Pomodoro Technique?
Make data-driven changes to your routine and make time yours.
Reach your goals
Identify your natural rhythm and maximize potential.
Work smarter, not harder.
See where your time really goes and unleash your full potential.
Level up your work processes.
Automate workflows, generate reports and submit timesheets easily.
It’s as easy as rolling a dice.
The Timeular Tracker is the world’s first 8-sided tracking dice, automatically tracking activities when flipped.
- Minute accurate time tracking, lightning fast
- Improve your focus through physical reminder
- No more over or under-estimating your time
QuickTrack: your time tracking superpower.
Our desktop shortcut lets you track time with the least effort and interruption possible.
- Track unlimited activities
- Super speedy notes & tags
- Create activities on the fly
How does Timeular work?
1. Assign
- Set activities and tasks within the app.
- If you’re using a Tracker, assign and customize each side of the dice.
- Create spaces for teams, projects, yourself or anything you like.
2. Track
- Use the Tracker or QuickTrack to start recording.
- Start/stop tracking from any device. Everything syncs.
- Capture, analyze and bill more time.

3. Get insights and reports
- Export customized reports.
- See where every minute of your working day is spent.
- Sync data and build powerful workflows in 3,000+ apps.
.png)
Everything you need, everywhere
Timeular is available on macOS, Linux, Windows, Android and iOS.
Connect with your favorite tools
Integrations to Zapier, Jira, Harvest and Toggl. Build anything with our API.
Over 50,000 customers can’t be wrong
Definition
Provides a mechanism for executing a method on a thread pool thread at specified intervals. This class cannot be inherited.
- Attributes

Examples
The following example defines a StatusChecker class that includes a CheckStatus method whose signature is the same as the TimerCallback delegate. The state argument of the CheckStatus method is an AutoResetEvent object that is used to synchronize the application thread and the thread pool thread that executes the callback delegate. The StatusChecker class also includes two state variables:
invokeCount
Indicates the number of times the callback method has been invoked.
maxCount
Determines the maximum number of times the callback method should be invoked.
The application thread creates the timer, which waits one second and then executes the CheckStatus callback method every 250 milliseconds. The application thread then blocks until the AutoResetEvent object is signaled. When the CheckStatus callback method executes maxCount times, it calls the AutoResetEvent.Set method to set the state of the AutoResetEvent object to signaled. The first time this happens, the application thread calls the Change(Int32, Int32) method so that the callback method now executes every half second. It once again blocks until the AutoResetEvent object is signaled. When this happens, the timer is destroyed by calling its Dispose method, and the application terminates.
Remarks
Use a TimerCallback delegate to specify the method you want the Timer to execute. The signature of the TimerCallback delegate is:
The timer delegate is specified when the timer is constructed, and cannot be changed. The method does not execute on the thread that created the timer; it executes on a ThreadPool thread supplied by the system.
Tip
.NET includes several timer classes, each of which offers different functionality:
Task Timer Freeware
- System.Timers.Timer, which fires an event and executes the code in one or more event sinks at regular intervals. The class is intended for use as a server-based or service component in a multithreaded environment; it has no user interface and is not visible at runtime.
- System.Threading.Timer, which executes a single callback method on a thread pool thread at regular intervals. The callback method is defined when the timer is instantiated and cannot be changed. Like the System.Timers.Timer class, this class is intended for use as a server-based or service component in a multithreaded environment; it has no user interface and is not visible at runtime.
- System.Windows.Forms.Timer (.NET Framework only), a Windows Forms component that fires an event and executes the code in one or more event sinks at regular intervals. The component has no user interface and is designed for use in a single-threaded environment; it executes on the UI thread.
- System.Web.UI.Timer (.NET Framework only), an ASP.NET component that performs asynchronous or synchronous web page postbacks at a regular interval.
- System.Windows.Threading.DispatcherTimer, a timer that's integrated into the
Dispatcherqueue. This timer is processed with a specified priority at a specified time interval.
When you create a timer, you can specify an amount of time to wait before the first execution of the method (due time), and an amount of time to wait between subsequent executions (period). The Timer class has the same resolution as the system clock. This means that if the period is less than the resolution of the system clock, the TimerCallback delegate will execute at intervals defined by the resolution of the system clock, which is approximately 15 milliseconds on Windows 7 and Windows 8 systems. You can change the due time and period, or disable the timer, by using the Change method.
Note
As long as you are using a Timer, you must keep a reference to it. As with any managed object, a Timer is subject to garbage collection when there are no references to it. The fact that a Timer is still active does not prevent it from being collected.
When a timer is no longer needed, use the Dispose method to free the resources held by the timer. Note that callbacks can occur after the Dispose() method overload has been called, because the timer queues callbacks for execution by thread pool threads. You can use the Dispose(WaitHandle) method overload to wait until all callbacks have completed.
The callback method executed by the timer should be reentrant, because it is called on ThreadPool threads. The callback can be executed simultaneously on two thread pool threads if the timer interval is less than the time required to execute the callback, or if all thread pool threads are in use and the callback is queued multiple times.
Note
System.Threading.Timer is a simple, lightweight timer that uses callback methods and is served by thread pool threads. It is not recommended for use with Windows Forms, because its callbacks do not occur on the user interface thread. System.Windows.Forms.Timer is a better choice for use with Windows Forms. For server-based timer functionality, you might consider using System.Timers.Timer, which raises events and has additional features.
Constructors
| Timer(TimerCallback) | Initializes a new instance of the Timer class with an infinite period and an infinite due time, using the newly created Timer object as the state object. |
| Timer(TimerCallback, Object, Int32, Int32) | Initializes a new instance of the |
| Timer(TimerCallback, Object, Int64, Int64) | Initializes a new instance of the |
| Timer(TimerCallback, Object, TimeSpan, TimeSpan) | Initializes a new instance of the |
| Timer(TimerCallback, Object, UInt32, UInt32) | Initializes a new instance of the |
Properties
| ActiveCount | Gets the number of timers that are currently active. An active timer is registered to tick at some point in the future, and has not yet been canceled. |
Methods
| Change(Int32, Int32) | Changes the start time and the interval between method invocations for a timer, using 32-bit signed integers to measure time intervals. |
| Change(Int64, Int64) | Changes the start time and the interval between method invocations for a timer, using 64-bit signed integers to measure time intervals. |
| Change(TimeSpan, TimeSpan) | Changes the start time and the interval between method invocations for a timer, using TimeSpan values to measure time intervals. |
| Change(UInt32, UInt32) | Changes the start time and the interval between method invocations for a timer, using 32-bit unsigned integers to measure time intervals. |
| CreateObjRef(Type) | Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object. (Inherited from MarshalByRefObject) |
| Dispose() | Releases all resources used by the current instance of Timer. |
| Dispose(WaitHandle) | Releases all resources used by the current instance of Timer and signals when the timer has been disposed of. |
| DisposeAsync() | Releases all resources used by the current instance of Timer. |
| Equals(Object) | Determines whether the specified object is equal to the current object. (Inherited from Object) |
| Finalize() | Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. |
| GetHashCode() | Serves as the default hash function. (Inherited from Object) |
| GetLifetimeService() | Retrieves the current lifetime service object that controls the lifetime policy for this instance. (Inherited from MarshalByRefObject) |
| GetType() | Gets the Type of the current instance. (Inherited from Object) |
| InitializeLifetimeService() | Obsolete. Obtains a lifetime service object to control the lifetime policy for this instance. (Inherited from MarshalByRefObject) |
| MemberwiseClone() | Creates a shallow copy of the current Object. (Inherited from Object) |
| MemberwiseClone(Boolean) | Creates a shallow copy of the current MarshalByRefObject object. (Inherited from MarshalByRefObject) |
| ToString() | Returns a string that represents the current object. (Inherited from Object) |
Extension Methods
| ConfigureAwait(IAsyncDisposable, Boolean) | Configures how awaits on the tasks returned from an async disposable are performed. |
Applies to
Thread Safety
This type is thread safe.
Task Timers Online
See also
