winforms 暂停布局和恢复布局之间的区别

yk9xbfzb  于 2022-11-17  发布在  其他
关注(0)|答案(1)|浏览(127)

我读了下面的线程Why use 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();            
    }
a5g8bdjr

a5g8bdjr1#

您已阻止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();
}

相关问题