落红护花 发表于 2021-2-24 16:46

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秒)


大佬们有没有办法啊,求助!

DanK 发表于 2021-2-24 16:57

有办法,稍等

wangyujie96 发表于 2021-2-24 17:01

建议用多线程,在新线程里写如上代码就能避免主界面/主线程卡住

DanK 发表于 2021-2-24 17:08

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();

         
      }

zpt1990115 发表于 2021-2-24 17:10

Cool_Breeze 发表于 2021-2-24 17:25

using System.Threading;
Thread.Sleep(1000);

tanyh 发表于 2021-2-24 17:31

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.
                        //
                }

这样就可以了!!!!

wap6575 发表于 2021-2-24 17:42

这样写会导致卡UI。另外这代码如果放在窗体main入口处,还会导致窗体6秒后在能打开。建议重新写个 方法用新线程去调用

sghzlx 发表于 2021-2-24 17:47

本帖最后由 sghzlx 于 2021-2-24 18:05 编辑

笨办法
放个timer,设置一下即可,设置周期2000,里面分别判断标签的值,再做出相应动作,最后关闭timer

落红护花 发表于 2021-2-24 18:31

DanK 发表于 2021-2-24 17:08
private void Form2_Load(object sender, EventArgs e)
      {
            ...

感谢感谢,非常好用
页: [1] 2
查看完整版本: C#延时怎么实现