Thread.Sleep太久,界面卡死

在Winform程序的UI界面使用Thread.Sleep,窗体界面会被卡死,如图1所示,程序sleep 5000毫秒,时间到了之后,按钮的名称才更改过来,窗体也能被鼠标拖动。而用Delay方法,就能让窗体在sleep中,也能活动起来,如图2所示。

Thread.Sleep太久,界面卡死_第1张图片

图一

Thread.Sleep太久,界面卡死_第2张图片

图二

 

private void button1_Click(object sender, EventArgs e)
        {
            //button1.Text = "用Thread...";
            //System.Threading.Thread.Sleep(5000);
            button1.Text = "用Delay...";
            Delay(5000);
        }

        public void Delay(int millSeconds)
        {
            Stopwatch watch = new Stopwatch();

            while (watch.ElapsedMilliseconds < millSeconds)
            {
                System.Threading.Thread.Sleep(50);

                Application.DoEvents();
            }

            watch.Stop();
        }

 最主要的就是这个Delay方法,用到一个秒表,之后是一个循环,循环里面的条件是当秒表计时器时间

 

你可能感兴趣的:(Thread.Sleep太久,界面卡死)