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スレッドの実行をブロックしたため(たとえば、WM_SETTEXTメッセージの処理)、UIを更新して「パート1が完了しました」と表示Thread.Sleep()することはできません。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 に答える