How to create a Digital Clock in C#
By FoxLearn 11/27/2024 9:36:51 AM 5.87K
In this article, we will walk through how to create a simple digital clock in C# using the System.Timers.Timer
class for time updates.
The clock will display the current system time in the format "HH:mm:ss" using a Label
control on a Windows Form. We'll use System.Timers.Timer
for accurate time intervals and demonstrate how to update the UI from a background thread using the Invoke
method.
How to make a Digital Clock in C#?
Open Visual Studio, then click New Project, then select Visual C# on the left, then Windows and then select Windows Forms Application. Name your project "DigitalClock" and then click OK
Drag and drop a Label control from Visual Toolbox onto your form designer, then design your form as shown below.
We use System.Timers.Timer
instead of the Windows.Forms.Timer
control for greater flexibility, as System.Timers.Timer
operates on a different thread. This is essential when working with long-running background operations, like continuously updating the time, because it allows the UI to remain responsive.
Building a Digital Clock in C# with System.Timers.Timer
The Form1_Load
method initializes the timer and starts it when the form is loaded.
// This event is triggered when the form loads private void Form1_Load(object sender, EventArgs e) { // Creating an instance of System.Timers.Timer System.Timers.Timer timer = new System.Timers.Timer(); // Set the interval to 1000ms (1 second) timer.Interval = 1000; // Attach the Elapsed event handler to the timer timer.Elapsed += Timer_Elapsed; // Start the timer timer.Start(); }
In the Timer_Elapsed
method, we use DateTime.Now.ToString("T")
to get the current time in the format "HH:mm:ss". The "T" format specifier returns the short time pattern of the system.
// This method is triggered every time the timer's Elapsed event fires (every second) private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { // Updating the label in a thread-safe way // We use Invoke to ensure that the UI is updated on the main thread Invoke(new MethodInvoker(delegate () { // Update the label text to the current time lblStatus.Text = DateTime.Now.ToString("T"); })); }
The Elapsed
event of the timer is raised every time the timer ticks. In the event handler, we use the Invoke
method to ensure that we update the label (lblStatus.Text
) on the UI thread, which is the main thread of the application.
When you run the application, the form will show a label that displays the current time. The System.Timers.Timer
updates this label every second. The timer is independent of the UI thread, so the Invoke
method ensures the time updates smoothly without any cross-thread exceptions.
VIDEO TUTORIAL