如何定期更新Label控件的值?
我正在尝试让标签显示一些文字,然后片刻之后刷新自己并稍后能够重新显示其他内容。 然而,目前我不知道如何暂停标签(如果可能的话)。
我的代码到目前为止:
foreach (var x in mod) { labelWARNING.Visible = true; labelWarningMessage.Text = "This module has a prerequisite module: " + x; //need a pause here to give user sufficient time to read the above text //labelWarningMessage.Text = ""; }
从您的问题来看,您似乎需要更改状态标签之类的值来定期向用户显示信息。 如果您使用的是winforms,则可以使用计时器和委托,如下所示:
从您的问题来看,您似乎需要更改状态标签之类的值来定期向用户显示信息。 如果您使用的是winforms,则可以使用计时器和委托,如下所示:
//First create a delegate to update the label value public delegate void labelChanger(string s); //create timer object Timer t = new Timer(); //create a generic List to store messages. You could also use a Queue instead. List mod = new List (); //index for list int cIndex = 0; //add this in your Form Load event or after InitializeComponent() t.Tick += (timer_tick); t.Interval = 5000;//how long you want it to stay. t.Start(); //the timer_tick method private void timer_tick(object s, EventArgs e) { labelWarningMessage.Invoke(new labelChanger(labelWork), mod[cIndex]); cIndex++; } //the method to do the actual message display private void labelWork(string s) { labelWARNING.Visible = true; labelWarningMessage.Text = "This module has a prerequisite module: " + s; }
我希望有所帮助。 祝好运。
编辑: 以为我很久以前发布这段代码只是为了回来发现我没有…但也许有人可能会觉得它很有用。
此外,在这种情况下,此方法将是多余的,因为单独创建Timer将在不使用委托的情况下工作,并且仅对委托使用和UI线程访问部分有用。
我会用另一个线程:
labelWARNING.Visible = true; labelWarningMessage.Text = "This module has a prerequisite module: " + item; new Thread(() => { Thread.Sleep(5000); Dispatcher.BeginInvoke((Action)(() => { labelWARNING.Visible = false; })); }).Start();
(这是针对WPF的,对于WinForms应该基本相同)
我用了一个计时器。
private void timer1_Tick(object sender, EventArgs e) { labelWarningMessage.Text = ""; labelWARNING.Visible = false; }
已更新为async / await。 这将
// Update all text with warning message foreach (var x in mod) { labelWARNING.Visible = true; labelWarningMessage.Text = "This module has a prerequisite module: " + x; } // Wait 1 second or 1000ms await Task.Delay(1000); // Now dismiss the message foreach (var x in mod) labelWarningMessage.Text = "";
周围的函数需要是一个public async Task SomeMethod()
或
public async void buttonClick(object sender, RoutedEventArgs e)
使用await
关键字