Winform - 显示mainform,等待,然后修改标签

时间:2014-02-25 19:46:14

标签: c# winforms

我一直在尝试执行标题中写的简单任务。我只能想到使用计时器,线程睡眠或后台工作者,但我只会做一次这个任务..所以我想避免做很多功能或者这样一次。我试过线程睡眠,但它没有在睡眠前显示主变形......有什么建议吗?

3 个答案:

答案 0 :(得分:6)

最简单的选择是使用await Task.Delay

private async void Form_Load(object sender, EventArgs e)
{
    await Task.Delay(timespan);
    label1.Text = "Hello world";
}

如果您无法使用您正在使用的.NET版本访问await,那么您最好的选择是使用Timer。是的,这是一个相当多的代码。这只是反映了异步操作的复杂性。 await做了很多事情来使这更简单;没有它,它只是一个不适合简化解决方案的问题。

答案 1 :(得分:1)

System.Threading.Timer事件中使用Form.Load

private const int DelayMilliseconds = 500;

private void Form1_Load(object sender, EventArgs e)
{
    new System.Threading.Timer(_ => Invoke(new Action(() => _myLabel.Text = "bla")),
                               null,
                               DelayMilliseconds,
                               Timeout.Infinite);
}

由于您只指定延迟且没有句点,因此计时器将只运行一次。但是,由于计时器回调是在不同的线程上执行的,因此您需要Invoke修改UI线程上的标签的操作。

答案 2 :(得分:0)

使用System.Timer实例

  • 使用Timer.Elapsed
  • 制作一个事件处理程序
  • 设置计时器间隔
  • 在应用程序启动时启动计时器 - 计时器过去后设置你的标签 -stop计时器