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