C# suspendlayout和resumelayout之间的区别

C# suspendlayout和resumelayout之间的区别,c#,winforms,C#,Winforms,所以我读了下面的帖子。所以我想我会创建一个小例子,给我概念的证明。但是,它不起作用。我只看到“第二部分完成”。请告知 private void button1_Click(object sender, EventArgs e) { this.SuspendLayout(); lblStatus.Text = "Part 1 completed"; this.ResumeLayout(); System.Thread

所以我读了下面的帖子。所以我想我会创建一个小例子,给我概念的证明。但是,它不起作用。我只看到“第二部分完成”。请告知

    private void button1_Click(object sender, EventArgs e)
    {
        this.SuspendLayout();
        lblStatus.Text = "Part 1 completed";
        this.ResumeLayout();

        System.Threading.Thread.Sleep(5000);

        this.SuspendLayout();
        lblStatus.Text = "Part 2 completed";
        this.ResumeLayout();            
    }

您已阻止UI线程使用
thread.Sleep()
(例如处理WM_SETTEXT消息)执行,因此它无法更新UI以显示“第1部分已完成”。它只能在UI线程恢复后刷新自身,此时您已要求它显示“第2部分已完成”

如果要模拟更改文本框值之间的一段时间,可以使用
计时器
。例如:

private void button1_Click(object sender, EventArgs e)
{
    this.SuspendLayout();
    label1.Text = "Part 1 completed";
    this.ResumeLayout();
    timer.Interval = 5000;
    timer.Start();
}

private void timer_Tick(object sender, EventArgs e)
{
    timer.Stop();
    this.SuspendLayout();
    label1.Text = "Part 2 completed";
    this.ResumeLayout();
}

但是我在睡觉前设置了标签?设置标签实际上是向控件发送一条消息——如果您阻止UI线程(使用
thread.sleep
),它将无法处理该消息(WM_SETTEXT)有没有办法完成我上面尝试的操作?