Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Interacting between two threads

I am working on a winform application, and my goal is to make a label on my form visible to the user, and three seconds later make the label invisible. The issue here is timing out three seconds. I honestly do not know if this was the correct solution to my problem, but I was able to make this work by creating a new thread, and having the new thread Sleep for three seconds (System.Threading.Thread.Sleep(3000)).

I can't use System.Threading.Thread.Sleep(3000) because this freezes my GUI for 3 seconds!

private void someVoid()
{
     lbl_authenticationProcess.Text = "Credentials have been verified authentic...";

     Thread sleepThreadStart = new Thread(new ThreadStart(newThread_restProgram));
     sleepThreadStart.Start();

     // Once three seconds has passed / thread has finished: lbl_authenticationProcess.Visible = false;
}

private void newThread_restProgram()
{
     System.Threading.Thread.Sleep(3000);
}

So, back to my original question. How can I determine (from my main thread) when the new thread has completed, meaning three seconds has passed?

I am open to new ideas as well as I'm sure there are many.


1 Answers

Right now, you are blocking the entire UI thread in order to hide a label after 3 seconds. If that's what you want, then just user Thread.Sleep(3000) from within the form. If not, though, then you're best off using a Timer:

System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Interval = 3000;
timer.Tick += (s, e) => { this.lbl_authenticationProcess.Visible = false; timer.Stop(); }
timer.Start();

After 3 seconds, the label will disappear. While you're waiting for that, though, a user can still interact with your application.

Note that you must use the Forms version of Timer, since its Tick event is raised on the UI thread, allowing direct access to the control. Other timers can work, but interaction with the control would have to be Invoke/BeginInvoked.

like image 173
dlev Avatar answered Jun 05 '26 13:06

dlev