基本的に、UI スレッドで眠っているべきではありません...これまで...あなたの質問が示している理由とまったく同じです。
1 秒でいくつかのコードを実行したいだけです。これを行うには、次の 2 つの効果的な方法があります。
1) を使用できますTimer
。名前空間でタイマーを使用することにより、UI スレッドでイベントが発生Forms
することを確認できTick
、UI 要素とやり取りするために特別なことをする必要はありません。
private void Form1_Load(object sender, EventArgs e)
{
label1.Text = "Loading . . .";
var timer = new System.Windows.Forms.Timer();
timer.Interval = 1000;
timer.Tick += (s, args) =>
{
label1.Text = "Done!";
};
timer.Start();
}
ご覧のとおり、これには理想よりも少し多くのコードが必要ですが、それでも機能します。
2) .NET 4.5 と C# 5.0 を使用している場合は、タスクを使用await
してこれを非常に滑らかで簡単にすることができます。
private async void Form1_Load(object sender, EventArgs e)
{
label1.Text = "Loading . . .";
await Task.Delay(1000); //wait 1 second, but don't block the UI thread.
label1.Text = "Done!";
}