{"id":7091,"date":"2023-09-28T08:41:39","date_gmt":"2023-09-28T00:41:39","guid":{"rendered":"https:\/\/i007.vip:15443\/wordpress\/?p=7091"},"modified":"2023-09-28T08:41:39","modified_gmt":"2023-09-28T00:41:39","slug":"c-timer-mastering-efficient-time-based-events","status":"publish","type":"post","link":"https:\/\/i007.cc\/wordpress\/archives\/7091","title":{"rendered":"C# Timer: Mastering Efficient Time-Based Events"},"content":{"rendered":"<header class=\"entry-header\" aria-label=\"Content\">\n<p class=\"entry-title\"><a href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/\">cc from<\/a><\/p>\n<p>&nbsp;<\/p>\n<div class=\"entry-meta\"><span class=\"byline\">by\u00a0<span class=\"author vcard\"><a class=\"url fn n\" title=\"View all posts by Anoop Kumar\" href=\"https:\/\/dotnetcoretutorials.com\/author\/anoop_kumar\/\" rel=\"author\"><span class=\"author-name\">Anoop Kumar<\/span><\/a><\/span><\/span><\/div>\n<\/header>\n<div class=\"entry-content\">\n<p>C# Timer is a powerful tool used in various software applications for scheduling events and executing code at specific intervals. This versatile feature is highly useful on both server-side and client-side applications, offering developers the ability to fine-tune their programs and optimize performance. Employing C# Timers enables the seamless execution of tasks without the need for manual interference or additional coding.<\/p>\n<p>One of the most commonly used C# Timers is the System.Timers.Timer class. By setting the AutoReset property, it allows continuous triggering of the Elapsed event at user-defined intervals. Another notable timer in the C# ecosystem is the System.Threading.Timer, which provides thread-safe management of timer events. Developers can choose the best-suited timer based on their project requirements and the level of flexibility they demand in managing time-sensitive tasks.<\/p>\n<p>Understanding the implementation and functionalities of C# Timers is essential for creating efficient and robust software applications. As the world of technology continues to evolve, timers will always be a central component, and harnessing their power will significantly improve the overall user experience.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_54_1 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\">Table of Contents<\/p>\n<p><span class=\"ez-toc-title-toggle\"><a class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle ez-toc-loaded\" role=\"button\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#\" aria-label=\"Toggle Table of Content\"><label for=\"item-64f88b39d2451\"><\/label><input id=\"item-64f88b39d2451\" type=\"checkbox\" aria-label=\"Toggle\" \/><\/a><\/span><\/div>\n<nav>\n<ul class=\"ez-toc-list ez-toc-list-level-1\">\n<li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-1\" title=\"C# Timer Fundamentals\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#C_Timer_Fundamentals\">C# Timer Fundamentals<\/a><\/li>\n<li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-2\" title=\"Types of Timers in C#\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#Types_of_Timers_in_C\">Types of Timers in C#<\/a><\/li>\n<li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-3\" title=\"Creating and Configuring Timers\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#Creating_and_Configuring_Timers\">Creating and Configuring Timers<\/a>\n<ul class=\"ez-toc-list-level-3\">\n<li class=\"ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-4\" title=\"Setting the Interval\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#Setting_the_Interval\">Setting the Interval<\/a><\/li>\n<li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-5\" title=\"AutoReset\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#AutoReset\">AutoReset<\/a><\/li>\n<li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-6\" title=\"Callbacks\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#Callbacks\">Callbacks<\/a><\/li>\n<\/ul>\n<\/li>\n<li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-7\" title=\"Timer Events and Event Handling\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#Timer_Events_and_Event_Handling\">Timer Events and Event Handling<\/a>\n<ul class=\"ez-toc-list-level-3\">\n<li class=\"ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-8\" title=\"Elapsed Event\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#Elapsed_Event\">Elapsed Event<\/a><\/li>\n<li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-9\" title=\"Tick Event\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#Tick_Event\">Tick Event<\/a><\/li>\n<\/ul>\n<\/li>\n<li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-10\" title=\"Working with Timer Objects\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#Working_with_Timer_Objects\">Working with Timer Objects<\/a>\n<ul class=\"ez-toc-list-level-3\">\n<li class=\"ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-11\" title=\"Enable and Disable Timers\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#Enable_and_Disable_Timers\">Enable and Disable Timers<\/a><\/li>\n<li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-12\" title=\"Disposing Timers\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#Disposing_Timers\">Disposing Timers<\/a><\/li>\n<\/ul>\n<\/li>\n<li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-13\" title=\"Examples and Implementation\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#Examples_and_Implementation\">Examples and Implementation<\/a>\n<ul class=\"ez-toc-list-level-3\">\n<li class=\"ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-14\" title=\"Single Timer Examples\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#Single_Timer_Examples\">Single Timer Examples<\/a><\/li>\n<li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-15\" title=\"Multiple Timer Examples\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#Multiple_Timer_Examples\">Multiple Timer Examples<\/a><\/li>\n<\/ul>\n<\/li>\n<li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-16\" title=\"Advanced Timer Concepts\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#Advanced_Timer_Concepts\">Advanced Timer Concepts<\/a>\n<ul class=\"ez-toc-list-level-3\">\n<li class=\"ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-17\" title=\"Multithreading and Timers\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#Multithreading_and_Timers\">Multithreading and Timers<\/a><\/li>\n<li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-18\" title=\"Server-Based Timers\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#Server-Based_Timers\">Server-Based Timers<\/a><\/li>\n<\/ul>\n<\/li>\n<li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-19\" title=\"Frequently Asked Questions\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#Frequently_Asked_Questions\">Frequently Asked Questions<\/a>\n<ul class=\"ez-toc-list-level-3\">\n<li class=\"ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-20\" title=\"How to create a callback with C# timer?\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#How_to_create_a_callback_with_C_timer\">How to create a callback with C# timer?<\/a><\/li>\n<li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-21\" title=\"Using timers in WPF applications\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#Using_timers_in_WPF_applications\">Using timers in WPF applications<\/a><\/li>\n<li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-22\" title=\"How to use Stopwatch class in C#?\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#How_to_use_Stopwatch_class_in_C\">How to use Stopwatch class in C#?<\/a><\/li>\n<li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-23\" title=\"Handling AutoReset property in C# timers\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#Handling_AutoReset_property_in_C_timers\">Handling AutoReset property in C# timers<\/a><\/li>\n<li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-24\" title=\"Starting and stopping a timer in C#\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#Starting_and_stopping_a_timer_in_C\">Starting and stopping a timer in C#<\/a><\/li>\n<li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-25\" title=\"Setting a timer interval for 10 minutes in C#\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#Setting_a_timer_interval_for_10_minutes_in_C\">Setting a timer interval for 10 minutes in C#<\/a><\/li>\n<li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-26\" title=\"Related posts:\" href=\"https:\/\/dotnetcoretutorials.com\/c-sharp-timer\/#Related_posts\">Related posts:<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/nav>\n<\/div>\n<h2 class=\"wp-block-heading\"><span id=\"C_Timer_Fundamentals\" class=\"ez-toc-section\"><\/span>C# Timer Fundamentals<\/h2>\n<p>The C# Timer class is a powerful and versatile feature that plays a vital role in software development for both server and client-side applications. This class enables developers to trigger events at specific time intervals without any interference.<\/p>\n<p>In C#, the Timer is part of the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><\/code>\u00a0namespace. This class provides a useful way to handle tasks that need to be executed repeatedly or after a certain amount of time has passed. The primary use of the Timer class is to raise the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Elapsed<\/span><\/code>\u00a0event at regular intervals defined by the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Interval<\/span><\/code>\u00a0property of the Timer object.<\/p>\n<p>To start working with a timer in C#, follow these basic steps:<\/p>\n<ol>\n<li><strong>Setup the Timer:<\/strong>\u00a0Instantiate a new Timer object and set the desired interval in milliseconds. For example, to create a timer that triggers every second (1000 milliseconds), you can use the following code:\u00a0<code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><span class=\"pln\">\u00a0timer\u00a0<\/span><span class=\"pun\">=<\/span><span class=\"pln\">\u00a0<\/span><span class=\"kwd\">new<\/span><span class=\"pln\">\u00a0<\/span><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><span class=\"pun\">(<\/span><span class=\"lit\">1000<\/span><span class=\"pun\">);<\/span><\/code><\/li>\n<li><strong>Define the Elapsed event handler:<\/strong>\u00a0The timer will call this handler every time the interval has elapsed. To create a simple event handler that writes a message to the console, use:\u00a0<code class=\" prettyprinted\"><span class=\"kwd\">void<\/span><span class=\"pln\">\u00a0<\/span><span class=\"typ\">HandleTimer<\/span><span class=\"pun\">(<\/span><span class=\"kwd\">object<\/span><span class=\"pln\">\u00a0sender<\/span><span class=\"pun\">,<\/span><span class=\"pln\">\u00a0<\/span><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">ElapsedEventArgs<\/span><span class=\"pln\">\u00a0e<\/span><span class=\"pun\">)<\/span><span class=\"pln\">\u00a0<\/span><span class=\"pun\">{<\/span><span class=\"pln\">\u00a0<\/span><span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"Interval Called\"<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\u00a0<\/span><span class=\"pun\">}<\/span><\/code><\/li>\n<li><strong>Attach the event handler to the Timer:<\/strong>\u00a0To connect the event handler to the Timer, use the following code:\u00a0<code class=\" prettyprinted\"><span class=\"pln\">timer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Elapsed<\/span><span class=\"pln\">\u00a0<\/span><span class=\"pun\">+=<\/span><span class=\"pln\">\u00a0<\/span><span class=\"typ\">HandleTimer<\/span><span class=\"pun\">;<\/span><\/code><\/li>\n<li><strong>Configure the Timer:<\/strong>\u00a0Set the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">AutoReset<\/span><\/code>\u00a0property to\u00a0<code class=\" prettyprinted\"><span class=\"kwd\">true<\/span><\/code>\u00a0if you want the timer to keep raising the Elapsed event regularly; otherwise, set it to\u00a0<code class=\" prettyprinted\"><span class=\"kwd\">false<\/span><\/code>. The default value is\u00a0<code class=\" prettyprinted\"><span class=\"kwd\">true<\/span><\/code>.\u00a0<code class=\" prettyprinted\"><span class=\"pln\">timer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">AutoReset<\/span><span class=\"pln\">\u00a0<\/span><span class=\"pun\">=<\/span><span class=\"pln\">\u00a0<\/span><span class=\"kwd\">true<\/span><span class=\"pun\">;<\/span><\/code><\/li>\n<li><strong>Start and stop the Timer:<\/strong>\u00a0Use the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Start<\/span><span class=\"pun\">()<\/span><\/code>\u00a0and\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Stop<\/span><span class=\"pun\">()<\/span><\/code>\u00a0methods to control the timer. For example:\u00a0<code class=\" prettyprinted\"><span class=\"pln\">timer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Start<\/span><span class=\"pun\">();<\/span><span class=\"pln\">\u00a0<\/span><span class=\"com\">\/\/ ... Your code here ... timer.Stop();<\/span><\/code><\/li>\n<\/ol>\n<p>Following these steps, developers can effectively use the C# Timer class to handle various time-based operations in their applications. The Timer class can be particularly helpful for executing tasks asynchronously or for coordinating scheduled tasks that must occur at specific time intervals.<\/p>\n<h2 class=\"wp-block-heading\"><span id=\"Types_of_Timers_in_C\" class=\"ez-toc-section\"><\/span>Types of Timers in C#<\/h2>\n<p>In C#, there are several timer classes available to perform tasks at specific intervals. Each timer has its own unique features and use-cases depending on the application\u2019s requirements. This section will discuss the following types of timers in C#: System.Timers.Timer, System.Threading.Timer, System.Windows.Forms.Timer, and System.Web.UI.Timer.<\/p>\n<p><strong>System.Timers.Timer<\/strong>\u00a0is a general-purpose timer that is best suited for server-based applications and services. This timer raises an event at specified intervals and supports auto-reset functionality. It is thread-safe and runs on a ThreadPool thread. It is part of the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><\/code>\u00a0namespace and implements the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">IDisposable<\/span><\/code>\u00a0interface.<\/p>\n<p><strong>System.Threading.Timer<\/strong>\u00a0is another timer option that is more suitable for multithreaded applications. Similar to System.Timers.Timer, this timer also runs on a ThreadPool thread. However, it provides finer control over the callback method execution. It is part of the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Threading<\/span><\/code>\u00a0namespace and is recommended for tasks requiring high-precision timing and responsiveness.<\/p>\n<p><strong>System.Windows.Forms.Timer<\/strong>\u00a0is designed for use in Windows Forms applications. It runs on the same thread as the application\u2019s user interface (UI) and is useful for updating UI elements. This timer will not execute its callback method if the application is busy with other UI events, ensuring a responsive user interface. It is part of the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Windows<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Forms<\/span><\/code>\u00a0namespace.<\/p>\n<p><strong>System.Web.UI.Timer<\/strong>\u00a0is designed specifically for ASP.NET web applications. It provides server-side timed events in web applications and integrates seamlessly with the ASP.NET lifecycle. This timer is part of the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Web<\/span><span class=\"pun\">.<\/span><span class=\"pln\">UI<\/span><\/code>\u00a0namespace and can trigger partial page updates using the UpdatePanel control.<\/p>\n<p>In summary, the choice of timer in C# depends on the application type, requirements for thread safety, precision, and responsiveness. It is essential to select the appropriate timer class to ensure optimal performance in the intended application.<\/p>\n<h2 class=\"wp-block-heading\"><span id=\"Creating_and_Configuring_Timers\" class=\"ez-toc-section\"><\/span>Creating and Configuring Timers<\/h2>\n<h3 class=\"wp-block-heading\"><span id=\"Setting_the_Interval\" class=\"ez-toc-section\"><\/span>Setting the Interval<\/h3>\n<p>To create a timer in C#, you need to set up the interval, specified in milliseconds. This interval refers to the duration between invocations of the timer\u2019s callback method. To set up a timer, you can use the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><\/code>\u00a0class:<\/p>\n<pre class=\"wp-block-code prettyprinted\"><code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><span class=\"pln\"> timer <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">new<\/span> <span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><span class=\"pun\">(<\/span><span class=\"pln\">interval<\/span><span class=\"pun\">:<\/span> <span class=\"lit\">1000<\/span><span class=\"pun\">);<\/span><\/code><\/pre>\n<p>In the example above, the timer has an interval of 1,000 milliseconds (1 second).<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"AutoReset\" class=\"ez-toc-section\"><\/span>AutoReset<\/h3>\n<p>The\u00a0<code class=\" prettyprinted\"><span class=\"typ\">AutoReset<\/span><\/code>\u00a0property determines whether the timer raises the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Elapsed<\/span><\/code>\u00a0event repeatedly or just once. By default, the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">AutoReset<\/span><\/code>\u00a0property is set to\u00a0<code class=\" prettyprinted\"><span class=\"kwd\">true<\/span><\/code>, which means that the event will be triggered regularly at the configured interval. To change this behavior and raise the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Elapsed<\/span><\/code>\u00a0event only once after the first interval has elapsed, you can set the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">AutoReset<\/span><\/code>\u00a0property to\u00a0<code class=\" prettyprinted\"><span class=\"kwd\">false<\/span><\/code>.<\/p>\n<pre class=\"wp-block-code prettyprinted\"><code class=\" prettyprinted\"><span class=\"pln\">timer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">AutoReset<\/span> <span class=\"pun\">=<\/span> <span class=\"kwd\">false<\/span><span class=\"pun\">;<\/span><\/code><\/pre>\n<h3 class=\"wp-block-heading\"><span id=\"Callbacks\" class=\"ez-toc-section\"><\/span>Callbacks<\/h3>\n<p>Callbacks are methods that the timer will call when the specified interval has elapsed. You can define callback methods using the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">TimerCallback<\/span><\/code>\u00a0delegate in the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Threading<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><\/code>\u00a0class. When creating a timer, you can pass the callback method, an optional state object, and the amount of time to delay before the first invocation of the callback.<\/p>\n<p>To create a callback method, you can define a method with parameters such as\u00a0<code class=\" prettyprinted\"><span class=\"kwd\">object<\/span><span class=\"pln\">\u00a0source<\/span><\/code>\u00a0and\u00a0<code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">ElapsedEventArgs<\/span><span class=\"pln\">\u00a0e<\/span><\/code>.<\/p>\n<pre class=\"wp-block-code prettyprinted\"><code class=\" prettyprinted\"><span class=\"kwd\">public<\/span> <span class=\"kwd\">void<\/span> <span class=\"typ\">OnTimerElapsed<\/span><span class=\"pun\">(<\/span><span class=\"kwd\">object<\/span><span class=\"pln\"> source<\/span><span class=\"pun\">,<\/span> <span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">ElapsedEventArgs<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">)<\/span>\r\n<span class=\"pun\">{<\/span>\r\n    <span class=\"com\">\/\/ Your code here.<\/span>\r\n<span class=\"pun\">}<\/span><\/code><\/pre>\n<p>You can then assign the callback method to the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Elapsed<\/span><\/code>\u00a0event of the timer:<\/p>\n<pre class=\"wp-block-code prettyprinted\"><code class=\" prettyprinted\"><span class=\"pln\">timer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Elapsed<\/span> <span class=\"pun\">+=<\/span> <span class=\"kwd\">new<\/span> <span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">ElapsedEventHandler<\/span><span class=\"pun\">(<\/span><span class=\"typ\">OnTimerElapsed<\/span><span class=\"pun\">);<\/span><\/code><\/pre>\n<p>You can also use a\u00a0<code class=\" prettyprinted\"><span class=\"typ\">DateTime<\/span><\/code>\u00a0object to set the timer\u2019s interval and the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">TimeSpan<\/span><\/code>\u00a0class to represent the duration between two\u00a0<code class=\" prettyprinted\"><span class=\"typ\">DateTime<\/span><\/code>\u00a0values. For example, you can use\u00a0<code class=\" prettyprinted\"><span class=\"typ\">DateTime<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Now<\/span><\/code>\u00a0to get the current date and time and calculate the timespan between two\u00a0<code class=\" prettyprinted\"><span class=\"typ\">DateTime<\/span><\/code>\u00a0objects.<\/p>\n<p>Remember to start the timer by setting the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Enabled<\/span><\/code>\u00a0property to\u00a0<code class=\" prettyprinted\"><span class=\"kwd\">true<\/span><\/code>:<\/p>\n<pre class=\"wp-block-code prettyprinted\"><code class=\" prettyprinted\"><span class=\"pln\">timer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Enabled<\/span> <span class=\"pun\">=<\/span> <span class=\"kwd\">true<\/span><span class=\"pun\">;<\/span><\/code><\/pre>\n<p>In this section, you learned how to create and configure timers in C#, including setting the interval, configuring the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">AutoReset<\/span><\/code>\u00a0property, and implementing callback methods.<\/p>\n<h2 class=\"wp-block-heading\"><span id=\"Timer_Events_and_Event_Handling\" class=\"ez-toc-section\"><\/span>Timer Events and Event Handling<\/h2>\n<p>In C#, Timer events are an essential component of scheduling specific actions. There are two common Timer events in the .NET framework: the Elapsed event and the Tick event. This section will discuss both Timer events and their associated event handling.<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"Elapsed_Event\" class=\"ez-toc-section\"><\/span>Elapsed Event<\/h3>\n<p>The Elapsed event belongs to the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><\/code>\u00a0class. This event gets fired at regular intervals, as specified by the Timer\u2019s\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Interval<\/span><\/code>\u00a0property. To handle the Elapsed event, an event handler method must be created, and it should accept two parameters: an object representing the sender, and an\u00a0<code class=\" prettyprinted\"><span class=\"typ\">ElapsedEventArgs<\/span><\/code>\u00a0object containing event data. In the event handler, typically, the desired action is performed, like updating a UI element, triggering a background process, or logging information.<\/p>\n<p>Here\u2019s a brief example to demonstrate the usage of the Elapsed event:<\/p>\n<pre class=\"wp-block-code prettyprinted\"><code class=\" prettyprinted\"><span class=\"kwd\">using<\/span> <span class=\"typ\">System<\/span><span class=\"pun\">;<\/span>\r\n<span class=\"kwd\">using<\/span> <span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">;<\/span>\r\n\r\n<span class=\"kwd\">class<\/span> <span class=\"typ\">TimerExample<\/span>\r\n<span class=\"pun\">{<\/span>\r\n    <span class=\"kwd\">static<\/span> <span class=\"kwd\">void<\/span> <span class=\"typ\">Main<\/span><span class=\"pun\">()<\/span>\r\n    <span class=\"pun\">{<\/span>\r\n        <span class=\"com\">\/\/ Instantiate a Timer object with an interval of 2000 milliseconds<\/span>\r\n        <span class=\"typ\">Timer<\/span><span class=\"pln\"> myTimer <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">new<\/span> <span class=\"typ\">Timer<\/span><span class=\"pun\">(<\/span><span class=\"lit\">2000<\/span><span class=\"pun\">);<\/span>\r\n\r\n        <span class=\"com\">\/\/ Attach the event handler to the Elapsed event<\/span><span class=\"pln\">\r\n        myTimer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Elapsed<\/span> <span class=\"pun\">+=<\/span> <span class=\"typ\">OnTimerElapsed<\/span><span class=\"pun\">;<\/span>\r\n\r\n        <span class=\"com\">\/\/ Start the Timer<\/span><span class=\"pln\">\r\n        myTimer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Enabled<\/span> <span class=\"pun\">=<\/span> <span class=\"kwd\">true<\/span><span class=\"pun\">;<\/span>\r\n        \r\n        <span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">ReadLine<\/span><span class=\"pun\">();<\/span>\r\n    <span class=\"pun\">}<\/span>\r\n\r\n    <span class=\"com\">\/\/ Event handler for Elapsed event<\/span>\r\n    <span class=\"kwd\">private<\/span> <span class=\"kwd\">static<\/span> <span class=\"kwd\">void<\/span> <span class=\"typ\">OnTimerElapsed<\/span><span class=\"pun\">(<\/span><span class=\"typ\">Object<\/span><span class=\"pln\"> source<\/span><span class=\"pun\">,<\/span> <span class=\"typ\">ElapsedEventArgs<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">)<\/span>\r\n    <span class=\"pun\">{<\/span>\r\n        <span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"pln\">$<\/span><span class=\"str\">\"Event occurred at {e.SignalTime}\"<\/span><span class=\"pun\">);<\/span>\r\n    <span class=\"pun\">}<\/span>\r\n<span class=\"pun\">}<\/span><\/code><\/pre>\n<p>In this example, a Timer object is instantiated with a 2000 ms interval (2 seconds), and the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">OnTimerElapsed<\/span><\/code>\u00a0event handler is attached to its Elapsed event. The Timer is then started, and the event handler is called on each interval, printing the event\u2019s occurrence time to the console.<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"Tick_Event\" class=\"ez-toc-section\"><\/span>Tick Event<\/h3>\n<p>The Tick event is associated with the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Windows<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Forms<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><\/code>\u00a0class, which is mainly used to update the user interface in Windows Forms applications. Similar to the Elapsed event, the Tick event is fired at regular intervals, defined by the Timer\u2019s\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Interval<\/span><\/code>\u00a0property. However, the event handler for the Tick event receives a plain\u00a0<code class=\" prettyprinted\"><span class=\"typ\">EventArgs<\/span><\/code>\u00a0object, as there is no unique event data associated with this event.<\/p>\n<p>Here\u2019s a simple example demonstrating the usage of the Tick event:<\/p>\n<pre class=\"wp-block-code prettyprinted\"><code class=\" prettyprinted\"><span class=\"kwd\">using<\/span> <span class=\"typ\">System<\/span><span class=\"pun\">;<\/span>\r\n<span class=\"kwd\">using<\/span> <span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Windows<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Forms<\/span><span class=\"pun\">;<\/span>\r\n\r\n<span class=\"kwd\">class<\/span> <span class=\"typ\">TickExample<\/span> <span class=\"pun\">:<\/span> <span class=\"typ\">Form<\/span>\r\n<span class=\"pun\">{<\/span>\r\n    <span class=\"typ\">Timer<\/span><span class=\"pln\"> tickTimer<\/span><span class=\"pun\">;<\/span>\r\n    <span class=\"typ\">Label<\/span><span class=\"pln\"> timerLabel<\/span><span class=\"pun\">;<\/span>\r\n\r\n    <span class=\"kwd\">public<\/span> <span class=\"typ\">TickExample<\/span><span class=\"pun\">()<\/span>\r\n    <span class=\"pun\">{<\/span>\r\n        <span class=\"com\">\/\/ Initialize a Timer object with a 1000 ms interval<\/span><span class=\"pln\">\r\n        tickTimer <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">new<\/span> <span class=\"typ\">Timer<\/span> <span class=\"pun\">{<\/span> <span class=\"typ\">Interval<\/span> <span class=\"pun\">=<\/span> <span class=\"lit\">1000<\/span> <span class=\"pun\">};<\/span>\r\n        \r\n        <span class=\"com\">\/\/ Attach the event handler to the Tick event<\/span><span class=\"pln\">\r\n        tickTimer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Tick<\/span> <span class=\"pun\">+=<\/span> <span class=\"typ\">OnTick<\/span><span class=\"pun\">;<\/span>\r\n        \r\n        <span class=\"com\">\/\/ Start the Timer<\/span><span class=\"pln\">\r\n        tickTimer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Start<\/span><span class=\"pun\">();<\/span>\r\n        \r\n        <span class=\"com\">\/\/ Initialize a Label that displays the Timer count<\/span><span class=\"pln\">\r\n        timerLabel <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">new<\/span> <span class=\"typ\">Label<\/span> <span class=\"pun\">{<\/span> <span class=\"typ\">Location<\/span> <span class=\"pun\">=<\/span> <span class=\"kwd\">new<\/span> <span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Drawing<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Point<\/span><span class=\"pun\">(<\/span><span class=\"lit\">50<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">50<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">};<\/span>\r\n        <span class=\"typ\">Controls<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Add<\/span><span class=\"pun\">(<\/span><span class=\"pln\">timerLabel<\/span><span class=\"pun\">);<\/span>\r\n    <span class=\"pun\">}<\/span>\r\n\r\n    <span class=\"com\">\/\/ Event handler for Tick event<\/span>\r\n    <span class=\"kwd\">private<\/span> <span class=\"kwd\">void<\/span> <span class=\"typ\">OnTick<\/span><span class=\"pun\">(<\/span><span class=\"typ\">Object<\/span><span class=\"pln\"> sender<\/span><span class=\"pun\">,<\/span> <span class=\"typ\">EventArgs<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">)<\/span>\r\n    <span class=\"pun\">{<\/span><span class=\"pln\">\r\n        timerLabel<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Text<\/span> <span class=\"pun\">=<\/span><span class=\"pln\"> $<\/span><span class=\"str\">\"Ticks: {Environment.TickCount}\"<\/span><span class=\"pun\">;<\/span>\r\n    <span class=\"pun\">}<\/span>\r\n<span class=\"pun\">}<\/span><\/code><\/pre>\n<p>In the above example, a Timer object is created with a 1000 ms interval (1 second), and the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">OnTick<\/span><\/code>\u00a0event handler is attached to its Tick event. The Timer is then started, and the event handler is called on each interval, updating the label\u2019s text to display the current tick count.<\/p>\n<h2 class=\"wp-block-heading\"><span id=\"Working_with_Timer_Objects\" class=\"ez-toc-section\"><\/span>Working with Timer Objects<\/h2>\n<p>C# timers are handy tools for scheduling the execution of a specific action after a certain interval. This section will focus on working with timer objects in C#.<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"Enable_and_Disable_Timers\" class=\"ez-toc-section\"><\/span>Enable and Disable Timers<\/h3>\n<p>To work with a timer object in C#, you first need to create an instance of the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><\/code>\u00a0class. You can set the desired interval in milliseconds during instantiation. For example:<\/p>\n<pre class=\"wp-block-code prettyprinted\"><code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><span class=\"pln\"> timer <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">new<\/span> <span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><span class=\"pun\">(<\/span><span class=\"pln\">interval<\/span><span class=\"pun\">:<\/span> <span class=\"lit\">1000<\/span><span class=\"pun\">);<\/span><\/code><\/pre>\n<p>This creates a timer object with a 1-second interval. The timer remains idle until you enable it by setting the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Enabled<\/span><\/code>\u00a0property to\u00a0<code class=\" prettyprinted\"><span class=\"kwd\">true<\/span><\/code>\u00a0or calling the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Start<\/span><span class=\"pun\">()<\/span><\/code>\u00a0method:<\/p>\n<pre class=\"wp-block-code prettyprinted\"><code class=\" prettyprinted\"><span class=\"pln\">timer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Enabled<\/span> <span class=\"pun\">=<\/span> <span class=\"kwd\">true<\/span><span class=\"pun\">;<\/span>\r\n<span class=\"com\">\/\/ or<\/span><span class=\"pln\">\r\ntimer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Start<\/span><span class=\"pun\">();<\/span><\/code><\/pre>\n<p>To define the action to be executed upon the timer\u2019s interval elapsing, you need to create an\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Elapsed<\/span><\/code>\u00a0event handler:<\/p>\n<pre class=\"wp-block-code prettyprinted\"><code class=\" prettyprinted\"><span class=\"pln\">timer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Elapsed<\/span> <span class=\"pun\">+=<\/span> <span class=\"pun\">(<\/span><span class=\"pln\">sender<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">=&gt;<\/span> <span class=\"pun\">{<\/span>\r\n    <span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"Interval called\"<\/span><span class=\"pun\">);<\/span>\r\n<span class=\"pun\">};<\/span><\/code><\/pre>\n<p>To temporarily disable the timer without disposing of it, you can set the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Enabled<\/span><\/code>\u00a0property to\u00a0<code class=\" prettyprinted\"><span class=\"kwd\">false<\/span><\/code>\u00a0or call the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Stop<\/span><span class=\"pun\">()<\/span><\/code>\u00a0method:<\/p>\n<pre class=\"wp-block-code prettyprinted\"><code class=\" prettyprinted\"><span class=\"pln\">timer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Enabled<\/span> <span class=\"pun\">=<\/span> <span class=\"kwd\">false<\/span><span class=\"pun\">;<\/span>\r\n<span class=\"com\">\/\/ or<\/span><span class=\"pln\">\r\ntimer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Stop<\/span><span class=\"pun\">();<\/span><\/code><\/pre>\n<h3 class=\"wp-block-heading\"><span id=\"Disposing_Timers\" class=\"ez-toc-section\"><\/span>Disposing Timers<\/h3>\n<p>Timers in C# implement the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">IDisposable<\/span><\/code>\u00a0interface, which means they need to be properly disposed of once they are no longer needed. This prevents memory leaks and ensures efficient resource management.<\/p>\n<p>To dispose of a timer, you can call the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Dispose<\/span><span class=\"pun\">()<\/span><\/code>\u00a0method:<\/p>\n<pre class=\"wp-block-code prettyprinted\"><code class=\" prettyprinted\"><span class=\"pln\">timer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Dispose<\/span><span class=\"pun\">();<\/span><\/code><\/pre>\n<p>Alternatively, you can use the\u00a0<code class=\" prettyprinted\"><span class=\"kwd\">using<\/span><\/code>\u00a0statement to ensure the timer is automatically disposed of when it goes out of scope:<\/p>\n<pre class=\"wp-block-code prettyprinted\"><code class=\" prettyprinted\"><span class=\"kwd\">using<\/span> <span class=\"pun\">(<\/span><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><span class=\"pln\"> t <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">new<\/span> <span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><span class=\"pun\">(<\/span><span class=\"pln\">interval<\/span><span class=\"pun\">:<\/span> <span class=\"lit\">1000<\/span><span class=\"pun\">))<\/span>\r\n<span class=\"pun\">{<\/span>\r\n    <span class=\"com\">\/\/ Your timer-related code here<\/span>\r\n<span class=\"pun\">}<\/span><\/code><\/pre>\n<p>It is important to note that when you dispose of a timer object, it becomes unusable, and you cannot re-enable it. To re-enable a disabled but not disposed timer, set its\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Enabled<\/span><\/code>\u00a0property to\u00a0<code class=\" prettyprinted\"><span class=\"kwd\">true<\/span><\/code>\u00a0or call the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Start<\/span><span class=\"pun\">()<\/span><\/code>\u00a0method.<\/p>\n<h2 class=\"wp-block-heading\"><span id=\"Examples_and_Implementation\" class=\"ez-toc-section\"><\/span>Examples and Implementation<\/h2>\n<p>In this section, we will cover the implementation of timer functionality in C# by providing examples of both single and multiple timers. The Timer class in C# is used to execute a code block repeatedly at a specified interval.<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"Single_Timer_Examples\" class=\"ez-toc-section\"><\/span>Single Timer Examples<\/h3>\n<p>The Timer class allows you to create a single timer that executes a delegate, such as a method, at specified intervals. Here is an example of implementing a single timer in C#:<\/p>\n<pre class=\"wp-block-code prettyprinted\"><code class=\" prettyprinted\"><span class=\"kwd\">using<\/span> <span class=\"typ\">System<\/span><span class=\"pun\">;<\/span>\r\n<span class=\"kwd\">using<\/span> <span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">;<\/span>\r\n\r\n<span class=\"kwd\">class<\/span> <span class=\"typ\">Program<\/span>\r\n<span class=\"pun\">{<\/span>\r\n    <span class=\"kwd\">static<\/span> <span class=\"kwd\">void<\/span> <span class=\"typ\">Main<\/span><span class=\"pun\">()<\/span>\r\n    <span class=\"pun\">{<\/span>\r\n        <span class=\"typ\">Timer<\/span><span class=\"pln\"> timer <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">new<\/span> <span class=\"typ\">Timer<\/span><span class=\"pun\">(<\/span><span class=\"lit\">1000<\/span><span class=\"pun\">);<\/span> <span class=\"com\">\/\/ Execute every 1000 milliseconds (1 second)<\/span><span class=\"pln\">\r\n        timer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Elapsed<\/span> <span class=\"pun\">+=<\/span> <span class=\"typ\">OnTimerElapsed<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\r\n        timer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">AutoReset<\/span> <span class=\"pun\">=<\/span> <span class=\"kwd\">true<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\r\n        timer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Start<\/span><span class=\"pun\">();<\/span>\r\n        <span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">ReadLine<\/span><span class=\"pun\">();<\/span> <span class=\"com\">\/\/ Wait for user to press ENTER<\/span><span class=\"pln\">\r\n        timer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Close<\/span><span class=\"pun\">();<\/span> <span class=\"com\">\/\/ Stop the timer<\/span>\r\n    <span class=\"pun\">}<\/span>\r\n\r\n    <span class=\"kwd\">static<\/span> <span class=\"kwd\">void<\/span> <span class=\"typ\">OnTimerElapsed<\/span><span class=\"pun\">(<\/span><span class=\"kwd\">object<\/span><span class=\"pln\"> sender<\/span><span class=\"pun\">,<\/span> <span class=\"typ\">ElapsedEventArgs<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">)<\/span>\r\n    <span class=\"pun\">{<\/span>\r\n        <span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"Timer ticked at \"<\/span> <span class=\"pun\">+<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">.<\/span><span class=\"typ\">SignalTime<\/span><span class=\"pun\">.<\/span><span class=\"typ\">ToString<\/span><span class=\"pun\">());<\/span>\r\n    <span class=\"pun\">}<\/span>\r\n<span class=\"pun\">}<\/span><\/code><\/pre>\n<p>In this example, we create a timer with an interval of 1000 milliseconds (1 second). The\u00a0<code class=\" prettyprinted\"><span class=\"typ\">OnTimerElapsed<\/span><\/code>\u00a0delegate is executed every time the timer ticks. The timer is stopped when the user presses ENTER.<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"Multiple_Timer_Examples\" class=\"ez-toc-section\"><\/span>Multiple Timer Examples<\/h3>\n<p>Sometimes you may need to run multiple timers simultaneously with different intervals. In the following example, we implement multiple timers with different intervals and delegates in C#:<\/p>\n<pre class=\"wp-block-code prettyprinted\"><code class=\" prettyprinted\"><span class=\"kwd\">using<\/span> <span class=\"typ\">System<\/span><span class=\"pun\">;<\/span>\r\n<span class=\"kwd\">using<\/span> <span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">;<\/span>\r\n\r\n<span class=\"kwd\">class<\/span> <span class=\"typ\">Program<\/span>\r\n<span class=\"pun\">{<\/span>\r\n    <span class=\"kwd\">static<\/span> <span class=\"kwd\">void<\/span> <span class=\"typ\">Main<\/span><span class=\"pun\">()<\/span>\r\n    <span class=\"pun\">{<\/span>\r\n        <span class=\"typ\">Timer<\/span><span class=\"pln\"> timer1 <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">new<\/span> <span class=\"typ\">Timer<\/span><span class=\"pun\">(<\/span><span class=\"lit\">1000<\/span><span class=\"pun\">);<\/span>\r\n        <span class=\"typ\">Timer<\/span><span class=\"pln\"> timer2 <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">new<\/span> <span class=\"typ\">Timer<\/span><span class=\"pun\">(<\/span><span class=\"lit\">2000<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\n\r\n        timer1<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Elapsed<\/span> <span class=\"pun\">+=<\/span> <span class=\"typ\">OnTimer1Elapsed<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\r\n        timer2<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Elapsed<\/span> <span class=\"pun\">+=<\/span> <span class=\"typ\">OnTimer2Elapsed<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\r\n\r\n        timer1<\/span><span class=\"pun\">.<\/span><span class=\"typ\">AutoReset<\/span> <span class=\"pun\">=<\/span> <span class=\"kwd\">true<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\r\n        timer2<\/span><span class=\"pun\">.<\/span><span class=\"typ\">AutoReset<\/span> <span class=\"pun\">=<\/span> <span class=\"kwd\">true<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\r\n\r\n        timer1<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Start<\/span><span class=\"pun\">();<\/span><span class=\"pln\">\r\n        timer2<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Start<\/span><span class=\"pun\">();<\/span>\r\n\r\n        <span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">ReadLine<\/span><span class=\"pun\">();<\/span> <span class=\"com\">\/\/ Wait for user to press ENTER<\/span><span class=\"pln\">\r\n\r\n        timer1<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Close<\/span><span class=\"pun\">();<\/span> <span class=\"com\">\/\/ Stop timer1<\/span><span class=\"pln\">\r\n        timer2<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Close<\/span><span class=\"pun\">();<\/span> <span class=\"com\">\/\/ Stop timer2<\/span>\r\n    <span class=\"pun\">}<\/span>\r\n\r\n    <span class=\"kwd\">static<\/span> <span class=\"kwd\">void<\/span> <span class=\"typ\">OnTimer1Elapsed<\/span><span class=\"pun\">(<\/span><span class=\"kwd\">object<\/span><span class=\"pln\"> sender<\/span><span class=\"pun\">,<\/span> <span class=\"typ\">ElapsedEventArgs<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">)<\/span>\r\n    <span class=\"pun\">{<\/span>\r\n        <span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"Timer1 ticked at \"<\/span> <span class=\"pun\">+<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">.<\/span><span class=\"typ\">SignalTime<\/span><span class=\"pun\">.<\/span><span class=\"typ\">ToString<\/span><span class=\"pun\">());<\/span>\r\n    <span class=\"pun\">}<\/span>\r\n\r\n    <span class=\"kwd\">static<\/span> <span class=\"kwd\">void<\/span> <span class=\"typ\">OnTimer2Elapsed<\/span><span class=\"pun\">(<\/span><span class=\"kwd\">object<\/span><span class=\"pln\"> sender<\/span><span class=\"pun\">,<\/span> <span class=\"typ\">ElapsedEventArgs<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">)<\/span>\r\n    <span class=\"pun\">{<\/span>\r\n        <span class=\"typ\">Console<\/span><span class=\"pun\">.<\/span><span class=\"typ\">WriteLine<\/span><span class=\"pun\">(<\/span><span class=\"str\">\"Timer2 ticked at \"<\/span> <span class=\"pun\">+<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">.<\/span><span class=\"typ\">SignalTime<\/span><span class=\"pun\">.<\/span><span class=\"typ\">ToString<\/span><span class=\"pun\">());<\/span>\r\n    <span class=\"pun\">}<\/span>\r\n<span class=\"pun\">}<\/span><\/code><\/pre>\n<p>In this example, we create two separate timers with different intervals (1 second and 2 seconds). Each timer has its own delegate, which is executed when the respective timer ticks. Both timers run simultaneously, and the application stops both timers when the user presses ENTER.<\/p>\n<h2 class=\"wp-block-heading\"><span id=\"Advanced_Timer_Concepts\" class=\"ez-toc-section\"><\/span>Advanced Timer Concepts<\/h2>\n<h3 class=\"wp-block-heading\"><span id=\"Multithreading_and_Timers\" class=\"ez-toc-section\"><\/span>Multithreading and Timers<\/h3>\n<p>In a multithreaded environment, timers play a crucial role in executing code at specific intervals or after a certain duration. The .NET framework provides several timer implementations including\u00a0<code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Threading<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><\/code>,\u00a0<code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><\/code>, and\u00a0<code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Threading<\/span><span class=\"pun\">.<\/span><span class=\"typ\">PeriodicTimer<\/span><\/code>. These timers are designed to run on a ThreadPool thread, which allows for efficient execution of small, short-running tasks in the background without affecting the overall performance of the application.<\/p>\n<p>The\u00a0<code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Threading<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><\/code>\u00a0class provides a mechanism for executing a method on a ThreadPool thread at particular intervals. To use it, you need to pass a delegate representing the method to be executed, a state object to pass along to the method, and the time interval for the timer. The Timer will then automatically enqueue the method to be executed on a ThreadPool thread. To ensure proper cleanup of resources, it is important to call the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Timer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Dispose<\/span><\/code>\u00a0method when the timer is no longer needed.<\/p>\n<p>The\u00a0<code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><\/code>\u00a0class is designed for use in server-based applications such as services and Web applications. It is optimized for high-resolution timers and provides events-based programming model. This timer also runs on a ThreadPool thread, raising the Elapsed event at the specified interval. To maintain accuracy and avoid drifting, the System.Timers.Timer class internally adjusts the interval based on the system clock. To use it, you need to set the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Interval<\/span><\/code>\u00a0property, subscribe to the Elapsed event, and start the timer by setting\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Enabled<\/span><\/code>\u00a0property to true. Remember to unsubscribe from the Elapsed event and dispose of the timer when it is no longer needed.<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"Server-Based_Timers\" class=\"ez-toc-section\"><\/span>Server-Based Timers<\/h3>\n<p>Server-based applications, such as Windows services and ASP.NET web applications, often use timers for executing background tasks or tasks with specific time constraints. The\u00a0<code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><\/code>\u00a0class is recommended for use in these scenarios due to its high-resolution capabilities and event-driven programming model.<\/p>\n<p>To use a server-based timer, follow these steps:<\/p>\n<ol>\n<li>Create a\u00a0<code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><\/code>\u00a0instance and set the desired\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Interval<\/span><\/code>\u00a0in milliseconds.<\/li>\n<li>Subscribe to the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Elapsed<\/span><\/code>\u00a0event and define an event handler that will be executed when the timer elapses.<\/li>\n<li>Set\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Enabled<\/span><\/code>\u00a0to true or call\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Start<\/span><\/code>\u00a0method to activate the timer.<\/li>\n<\/ol>\n<p>For example:<\/p>\n<pre class=\"wp-block-code prettyprinted\"><code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><span class=\"pln\"> timer <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">new<\/span> <span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><span class=\"pun\">(<\/span><span class=\"lit\">1000<\/span><span class=\"pun\">);<\/span> <span class=\"com\">\/\/ 1 second interval<\/span><span class=\"pln\">\r\ntimer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Elapsed<\/span> <span class=\"pun\">+=<\/span> <span class=\"typ\">OnTimerElapsed<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\r\ntimer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Enabled<\/span> <span class=\"pun\">=<\/span> <span class=\"kwd\">true<\/span><span class=\"pun\">;<\/span>\r\n\r\n<span class=\"kwd\">private<\/span> <span class=\"kwd\">void<\/span> <span class=\"typ\">OnTimerElapsed<\/span><span class=\"pun\">(<\/span><span class=\"kwd\">object<\/span><span class=\"pln\"> sender<\/span><span class=\"pun\">,<\/span> <span class=\"typ\">ElapsedEventArgs<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">)<\/span>\r\n<span class=\"pun\">{<\/span>\r\n    <span class=\"com\">\/\/ Execute your code here<\/span>\r\n<span class=\"pun\">}<\/span><\/code><\/pre>\n<p>When using server-based timers, it is essential to consider the impact of multithreading and ensure that the code executed within the timer is thread-safe. If multiple instances of the timer elapse at the same time, the event handler may be executed concurrently by multiple threads, which can lead to unexpected behavior or resource contention.<\/p>\n<p>In conclusion, understanding the advanced timer concepts, such as multithreading and server-based timers, is essential when working with timers in C#. Utilizing the appropriate timer implementation and ensuring proper usage will result in efficient, accurate, and reliable time-based operations within your applications.<\/p>\n<h2 class=\"wp-block-heading\"><span id=\"Frequently_Asked_Questions\" class=\"ez-toc-section\"><\/span>Frequently Asked Questions<\/h2>\n<h3 class=\"wp-block-heading\"><span id=\"How_to_create_a_callback_with_C_timer\" class=\"ez-toc-section\"><\/span>How to create a callback with C# timer?<\/h3>\n<p>To create a callback with a C# timer, first, create a\u00a0<code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><\/code>\u00a0object and set the desired interval in milliseconds. Next, attach an event handler to the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Elapsed<\/span><\/code>\u00a0event:<\/p>\n<pre class=\"wp-block-code prettyprinted\"><code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><span class=\"pln\"> timer <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">new<\/span> <span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><span class=\"pun\">(<\/span><span class=\"lit\">1000<\/span><span class=\"pun\">);<\/span> <span class=\"com\">\/\/ 1000 milliseconds equals 1 second<\/span><span class=\"pln\">\r\ntimer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Elapsed<\/span> <span class=\"pun\">+=<\/span> <span class=\"pun\">(<\/span><span class=\"pln\">sender<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">=&gt;<\/span> <span class=\"typ\">CallbackMethod<\/span><span class=\"pun\">(<\/span><span class=\"pln\">sender<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\ntimer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Start<\/span><span class=\"pun\">();<\/span><\/code><\/pre>\n<p>In the above example, the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">CallbackMethod<\/span><\/code>\u00a0will be executed every time the timer\u2019s interval has elapsed.<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"Using_timers_in_WPF_applications\" class=\"ez-toc-section\"><\/span>Using timers in WPF applications<\/h3>\n<p>In WPF applications, it is recommended to use the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Windows<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Threading<\/span><span class=\"pun\">.<\/span><span class=\"typ\">DispatcherTimer<\/span><\/code>\u00a0class instead of\u00a0<code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><\/code>. This is because\u00a0<code class=\" prettyprinted\"><span class=\"typ\">DispatcherTimer<\/span><\/code>\u00a0integrates with the WPF application\u2019s main UI thread, preventing potential cross-thread issues.<\/p>\n<pre class=\"wp-block-code prettyprinted\"><code class=\" prettyprinted\"><span class=\"kwd\">public<\/span> <span class=\"kwd\">partial<\/span> <span class=\"kwd\">class<\/span> <span class=\"typ\">MainWindow<\/span> <span class=\"pun\">:<\/span> <span class=\"typ\">Window<\/span>\r\n<span class=\"pun\">{<\/span>\r\n    <span class=\"kwd\">private<\/span> <span class=\"typ\">DispatcherTimer<\/span><span class=\"pln\"> timer<\/span><span class=\"pun\">;<\/span>\r\n\r\n    <span class=\"kwd\">public<\/span> <span class=\"typ\">MainWindow<\/span><span class=\"pun\">()<\/span>\r\n    <span class=\"pun\">{<\/span>\r\n        <span class=\"typ\">InitializeComponent<\/span><span class=\"pun\">();<\/span><span class=\"pln\">\r\n        timer <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">new<\/span> <span class=\"typ\">DispatcherTimer<\/span><span class=\"pun\">();<\/span><span class=\"pln\">\r\n        timer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Interval<\/span> <span class=\"pun\">=<\/span> <span class=\"typ\">TimeSpan<\/span><span class=\"pun\">.<\/span><span class=\"typ\">FromSeconds<\/span><span class=\"pun\">(<\/span><span class=\"lit\">1<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\n        timer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Tick<\/span> <span class=\"pun\">+=<\/span> <span class=\"typ\">Timer_Tick<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\r\n        timer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Start<\/span><span class=\"pun\">();<\/span>\r\n    <span class=\"pun\">}<\/span>\r\n\r\n    <span class=\"kwd\">private<\/span> <span class=\"kwd\">void<\/span> <span class=\"typ\">Timer_Tick<\/span><span class=\"pun\">(<\/span><span class=\"kwd\">object<\/span><span class=\"pln\"> sender<\/span><span class=\"pun\">,<\/span> <span class=\"typ\">EventArgs<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">)<\/span>\r\n    <span class=\"pun\">{<\/span>\r\n        <span class=\"com\">\/\/ Update UI elements here<\/span>\r\n    <span class=\"pun\">}<\/span>\r\n<span class=\"pun\">}<\/span><\/code><\/pre>\n<h3 class=\"wp-block-heading\"><span id=\"How_to_use_Stopwatch_class_in_C\" class=\"ez-toc-section\"><\/span>How to use Stopwatch class in C#?<\/h3>\n<p>The\u00a0<code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Diagnostics<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Stopwatch<\/span><\/code>\u00a0class provides precise time measurements. To use the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Stopwatch<\/span><\/code>\u00a0class, create an instance, start the timer, perform the desired operation, then stop the timer and read the elapsed time.<\/p>\n<pre class=\"wp-block-code prettyprinted\"><code class=\" prettyprinted\"><span class=\"typ\">Stopwatch<\/span><span class=\"pln\"> stopwatch <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">new<\/span> <span class=\"typ\">Stopwatch<\/span><span class=\"pun\">();<\/span><span class=\"pln\">\r\nstopwatch<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Start<\/span><span class=\"pun\">();<\/span>\r\n\r\n<span class=\"com\">\/\/ Perform some operation here<\/span><span class=\"pln\">\r\n\r\nstopwatch<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Stop<\/span><span class=\"pun\">();<\/span>\r\n<span class=\"typ\">TimeSpan<\/span><span class=\"pln\"> elapsedTime <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> stopwatch<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Elapsed<\/span><span class=\"pun\">;<\/span><\/code><\/pre>\n<h3 class=\"wp-block-heading\"><span id=\"Handling_AutoReset_property_in_C_timers\" class=\"ez-toc-section\"><\/span>Handling AutoReset property in C# timers<\/h3>\n<p>By default,\u00a0<code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><\/code>\u00a0instances have the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">AutoReset<\/span><\/code>\u00a0property set to\u00a0<code class=\" prettyprinted\"><span class=\"kwd\">true<\/span><\/code>. This means the timer will keep firing the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Elapsed<\/span><\/code>\u00a0event at the set interval. If you want the timer to fire the event only once, set\u00a0<code class=\" prettyprinted\"><span class=\"typ\">AutoReset<\/span><\/code>\u00a0to\u00a0<code class=\" prettyprinted\"><span class=\"kwd\">false<\/span><\/code>.<\/p>\n<pre class=\"wp-block-code prettyprinted\"><code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><span class=\"pln\"> timer <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">new<\/span> <span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><span class=\"pun\">(<\/span><span class=\"lit\">1000<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\ntimer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">AutoReset<\/span> <span class=\"pun\">=<\/span> <span class=\"kwd\">false<\/span><span class=\"pun\">;<\/span><span class=\"pln\">\r\ntimer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Elapsed<\/span> <span class=\"pun\">+=<\/span> <span class=\"pun\">(<\/span><span class=\"pln\">sender<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">=&gt;<\/span> <span class=\"typ\">CallbackMethod<\/span><span class=\"pun\">(<\/span><span class=\"pln\">sender<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\ntimer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Start<\/span><span class=\"pun\">();<\/span><\/code><\/pre>\n<h3 class=\"wp-block-heading\"><span id=\"Starting_and_stopping_a_timer_in_C\" class=\"ez-toc-section\"><\/span>Starting and stopping a timer in C#<\/h3>\n<p>To start a timer, call the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Start<\/span><span class=\"pun\">()<\/span><\/code>\u00a0method of the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><\/code>\u00a0object. To stop the timer, call the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">Stop<\/span><span class=\"pln\">\u00a0<\/span><span class=\"pun\">()<\/span><\/code>\u00a0method. Remember to dispose the timer when no longer needed.<\/p>\n<pre class=\"wp-block-code prettyprinted\"><code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><span class=\"pln\"> timer <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">new<\/span> <span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><span class=\"pun\">(<\/span><span class=\"lit\">1000<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\ntimer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Elapsed<\/span> <span class=\"pun\">+=<\/span> <span class=\"pun\">(<\/span><span class=\"pln\">sender<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">=&gt;<\/span> <span class=\"typ\">CallbackMethod<\/span><span class=\"pun\">(<\/span><span class=\"pln\">sender<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\ntimer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Start<\/span><span class=\"pun\">();<\/span>\r\n\r\n<span class=\"com\">\/\/ Stop the timer when needed<\/span><span class=\"pln\">\r\ntimer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Stop<\/span><span class=\"pun\">();<\/span>\r\n\r\n<span class=\"com\">\/\/ Dispose the timer when no longer needed<\/span><span class=\"pln\">\r\ntimer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Dispose<\/span><span class=\"pun\">();<\/span><\/code><\/pre>\n<h3 class=\"wp-block-heading\"><span id=\"Setting_a_timer_interval_for_10_minutes_in_C\" class=\"ez-toc-section\"><\/span>Setting a timer interval for 10 minutes in C#<\/h3>\n<p>To set a timer interval for 10 minutes in C#, use the following code:<\/p>\n<pre class=\"wp-block-code prettyprinted\"><code class=\" prettyprinted\"><span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><span class=\"pln\"> timer <\/span><span class=\"pun\">=<\/span> <span class=\"kwd\">new<\/span> <span class=\"typ\">System<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timers<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Timer<\/span><span class=\"pun\">(<\/span><span class=\"lit\">600000<\/span><span class=\"pun\">);<\/span> <span class=\"com\">\/\/ 600000 milliseconds equals 10 minutes<\/span><span class=\"pln\">\r\ntimer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Elapsed<\/span> <span class=\"pun\">+=<\/span> <span class=\"pun\">(<\/span><span class=\"pln\">sender<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">)<\/span> <span class=\"pun\">=&gt;<\/span> <span class=\"typ\">CallbackMethod<\/span><span class=\"pun\">(<\/span><span class=\"pln\">sender<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> e<\/span><span class=\"pun\">);<\/span><span class=\"pln\">\r\ntimer<\/span><span class=\"pun\">.<\/span><span class=\"typ\">Start<\/span><span class=\"pun\">();<\/span><\/code><\/pre>\n<p>Now the timer is set to execute the\u00a0<code class=\" prettyprinted\"><span class=\"typ\">CallbackMethod<\/span><\/code>\u00a0every 10 minutes.<\/p>\n<div class=\"yarpp yarpp-related yarpp-related-website yarpp-template-list\">\n<h3>Related Posts:<\/h3>\n<ol>\n<li><a title=\"Simplifying Multithreaded Scenarios With PostSharp Threading\" href=\"https:\/\/dotnetcoretutorials.com\/simplifying-multithreaded-scenarios-with-postsharp-threading\/\" rel=\"bookmark\">Simplifying Multithreaded Scenarios With PostSharp Threading<\/a><\/li>\n<li><a title=\"Dapper In .NET Core \u2013 Part 2 \u2013 Dapper Query Basics\" href=\"https:\/\/dotnetcoretutorials.com\/dapper-in-net-core-part-2-dapper-query-basics\/\" rel=\"bookmark\">Dapper In .NET Core \u2013 Part 2 \u2013 Dapper Query Basics<\/a><\/li>\n<li><a title=\"C# vs Java: A Comprehensive Comparison\" href=\"https:\/\/dotnetcoretutorials.com\/c-vs-java\/\" rel=\"bookmark\">C# vs Java: A Comprehensive Comparison<\/a><\/li>\n<li><a title=\"Hosted Services In ASP.NET Core\" href=\"https:\/\/dotnetcoretutorials.com\/hosted-services-in-asp-net-core\/\" rel=\"bookmark\">Hosted Services In ASP.NET Core<\/a><\/li>\n<\/ol>\n<\/div>\n<\/div>\n<footer class=\"entry-meta\" aria-label=\"Entry meta\">\n<nav id=\"nav-below\" class=\"post-navigation\" aria-label=\"Posts\">\n<div class=\"nav-previous\"><span class=\"prev\"><a href=\"https:\/\/dotnetcoretutorials.com\/ref-in-c-sharp\/\" rel=\"prev\">Ref Keyword in C#: A Comprehensive Guide<\/a><\/span><\/div>\n<div class=\"nav-next\"><span class=\"next\"><a href=\"https:\/\/dotnetcoretutorials.com\/asp-net-repeater\/\" rel=\"next\">Asp.net Repeater: A Comprehensive Guide for Efficient Data Binding<\/a><\/span><\/div>\n<\/nav>\n<\/footer>\n","protected":false},"excerpt":{"rendered":"<p>cc from &nbsp; by\u00a0An<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[24],"tags":[121],"class_list":["post-7091","post","type-post","status-publish","format-standard","hentry","category-value_docs","tag-05-"],"_links":{"self":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts\/7091","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/comments?post=7091"}],"version-history":[{"count":0,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts\/7091\/revisions"}],"wp:attachment":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/media?parent=7091"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/categories?post=7091"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/tags?post=7091"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}