2016-03-24 7 views
-1

私のラベルのテキストを変更しようとすると、次のフォームが開くまでに遅延が生じます。しかし、ラベルのテキストは変わらず、ただ待っていますか?ラベルテキストはスレッドがスリープする前に変更されませんか?

label3.Text = "loading tools"; 
     Thread.Sleep(2000); 
     Form4 frm = new Form4(); 
     frm.Show(); 
     this.Hide(); 
+0

ラベルを変更した直後に 'this.Refresh();'を呼び出すとどうなりますか?しかし、最近、この種の問題にアプローチする正しい方法は 'await Task.Delay(2000)'を使うことです。 –

+1

一般的に、この種の作業はマルチスレッドで行う必要があります。前述のツールをロードする新しいスレッドを作成し、終了時に前記スレッドが 'Form4'を作成し、現在のフォームを閉じるための' Invoke'呼び出しを行います。 _Never_あなたのUIスレッドをブロックしてください。特に、荒れ狂った 'Thread.Sleep()'ではそうではありません。それはプログラムをフリーズさせる。 – Nyerguds

答えて

0

ラベルテキストの変更後Application.DoEvents()を追加します。

label3.Text = "loading tools"; 
Application.DoEvents(); 
Thread.Sleep(2000); 
Form4 frm = new Form4(); 
frm.Show(); 
this.Hide(); 
+1

私は 'Application.DoEvents()'の使用をお勧めしません - それは不快な再入力を引き起こす可能性があります。 –

0

label3.Text = "読み込みツールを";

label3.Refresh();

Thread.Sleep(2000);

Form4 frm = new Form4();

frm.Show();

this.Hide();

関連する問題