suspendlayout和resumayout的区别

本文关键字:区别 resumayout suspendlayout | 更新日期: 2023-09-27 18:01:25

我读了下面的线程为什么使用suspendLayout。所以我想我应该创造一个小的例子来证明我的概念。但是,这行不通。我只看到"第二部分完成了"。

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

suspendlayout和resumayout的区别

你已经阻止了UI线程执行Thread.Sleep()(例如处理WM_SETTEXT消息),因此它不能更新UI到显示 "Part 1 completed"。它只有在UI线程恢复后才能够刷新自己,到那时你已经要求它显示"Part 2 completed"

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

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