I have made an application to have a marquee text with an exit button. The button works fine when the timer is disabled but it cannot be clicked once the timer is enabled. Can anyone please help me? I tried researching online but no answer seems to be available, thank you! :)
this is the code that I have
public FORM_ENTRY()
{
InitializeComponent();
LabelWelcome.Text = "Welcome! Welkom! Selamat Datang! Wilkommen!";
timer1.Enabled = true;
LabelCheckedIn.Visible = false;
LabelEnjoy.Visible = false;
}
private void StartScroll()
{
System.Text.StringBuilder sb = new System.Text.StringBuilder(LabelWelcome.Text + " ");
while (true)
{
char ch = sb[sb.Length - 1];
sb.Remove(sb.Length - 1, 1);
sb.Insert(0, ch);
LabelWelcome.Text = sb.ToString();
LabelWelcome.Refresh();
System.Threading.Thread.Sleep(500);
}
}
private void timer1_Tick(object sender, EventArgs e)
{
StartScroll();
}
private void ButtonExit_Click(object sender, EventArgs e)
{
this.Close();
}
Use a DispatchTimer, it will run on a separate thread, and the event will be triggered on the UI thread, so you will be able to modify your UI
private DispatcherTimer dispatcherTimer;
public FORM_ENTRY()
{
InitializeComponent();
LabelWelcome.Text = "Welcome! Welkom! Selamat Datang! Wilkommen!";
LabelCheckedIn.Visible = false;
LabelEnjoy.Visible = false;
// Initialize Dispatcher
dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
// Five seconds delay
dispatcherTimer.Interval = new TimeSpan(0, 0, 5);
dispatcherTimer.Start();
}
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder(LabelWelcome.Text);
char ch = sb[sb.Length - 1];
sb.Remove(sb.Length - 1, 1);
sb.Insert(0, ch);
LabelWelcome.Text = sb.ToString();
}
private void ButtonExit_Click(object sender, EventArgs e)
{
this.Close();
}