私のラベルのテキストを変更しようとすると、次のフォームが開くまでに遅延が生じます。しかし、ラベルのテキストは変わらず、ただ待っていますか?ラベルテキストはスレッドがスリープする前に変更されませんか?
label3.Text = "loading tools";
Thread.Sleep(2000);
Form4 frm = new Form4();
frm.Show();
this.Hide();
私のラベルのテキストを変更しようとすると、次のフォームが開くまでに遅延が生じます。しかし、ラベルのテキストは変わらず、ただ待っていますか?ラベルテキストはスレッドがスリープする前に変更されませんか?
label3.Text = "loading tools";
Thread.Sleep(2000);
Form4 frm = new Form4();
frm.Show();
this.Hide();
ラベルテキストの変更後Application.DoEvents()を追加します。
label3.Text = "loading tools";
Application.DoEvents();
Thread.Sleep(2000);
Form4 frm = new Form4();
frm.Show();
this.Hide();
私は 'Application.DoEvents()'の使用をお勧めしません - それは不快な再入力を引き起こす可能性があります。 –
label3.Text = "読み込みツールを";
label3.Refresh();
Thread.Sleep(2000);
Form4 frm = new Form4();
frm.Show();
this.Hide();
ラベルを変更した直後に 'this.Refresh();'を呼び出すとどうなりますか?しかし、最近、この種の問題にアプローチする正しい方法は 'await Task.Delay(2000)'を使うことです。 –
一般的に、この種の作業はマルチスレッドで行う必要があります。前述のツールをロードする新しいスレッドを作成し、終了時に前記スレッドが 'Form4'を作成し、現在のフォームを閉じるための' Invoke'呼び出しを行います。 _Never_あなたのUIスレッドをブロックしてください。特に、荒れ狂った 'Thread.Sleep()'ではそうではありません。それはプログラムをフリーズさせる。 – Nyerguds