0

所以我阅读了以下线程为什么使用 suspendLayout。所以我想我会创建一个小例子来证明我的概念。但是,它不起作用。我只看到“第 2 部分已完成”。请指教。

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

1 回答 1

1

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

如果您想模拟更改文本框值之间的时间段,您可以使用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();
}
于 2013-02-28T05:47:03.467 回答