C#延时怎么实现
本帖最后由 winnie2007 于 2021-2-24 18:32 编辑label1.Text = "0";
延时2秒
label2.Text = "1";
延时2秒
label3.Text = "2";
延时2秒
label4.Text = "3";
运行效果:label1先显示0,两秒后label2显示1,两秒后label3显示2 。。。
用 System.Threading.Thread.Sleep(2000);不行,这样只会使6秒后编译程序(2*3=6秒)
大佬们有没有办法啊,求助! 有办法,稍等 建议用多线程,在新线程里写如上代码就能避免主界面/主线程卡住 private void Form2_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
new System.Threading.Thread(() =>
{
label1.Text = "1";
System.Threading.Thread.Sleep(2000);
label2.Text = "2";
System.Threading.Thread.Sleep(2000);
label3.Text = "3";
}).Start();
} using System.Threading;
Thread.Sleep(1000); public MainForm()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
ThreadPool.UnsafeQueueUserWorkItem((param) => {
var isCreated = false;
while (!isCreated)
{
if (this.IsHandleCreated) {
isCreated = true;
label1.BeginInvoke(new Action(() => label1.Text = "1"));
Thread.Sleep(1000);
label2.BeginInvoke(new Action(() => label2.Text = "2"));
Thread.Sleep(1000);
label3.BeginInvoke(new Action(() => label3.Text = "3"));
Thread.Sleep(1000);
label4.BeginInvoke(new Action(() => label4.Text = "4"));
}
}
}, null);
//
// TODO: Add constructor code after the InitializeComponent() call.
//
}
这样就可以了!!!! 这样写会导致卡UI。另外这代码如果放在窗体main入口处,还会导致窗体6秒后在能打开。建议重新写个 方法用新线程去调用 本帖最后由 sghzlx 于 2021-2-24 18:05 编辑
笨办法
放个timer,设置一下即可,设置周期2000,里面分别判断标签的值,再做出相应动作,最后关闭timer
DanK 发表于 2021-2-24 17:08
private void Form2_Load(object sender, EventArgs e)
{
...
感谢感谢,非常好用
页:
[1]
2