0

合計5つのフォームを持つプログラムを構築しています。1 つの MDIContainer と 4 つの MDIChildren。

私は現在thread.sleep(1000)、各 MDIChild を持っています。操作が実行されると、他の 3 つの MDIChilds が機能し、対話可能である必要があります。ただし、現在、thread.sleep(1000)が呼び出されると、プログラム全体が 1 秒間スリープし、他のフォームと対話する前にスリープが終了するのを待つ必要があります。

単一のフォームをスリープ状態にする方法はありますか? もしそうなら、方法と例を教えてください。

4

1 に答える 1

1

基本的に、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!";
}
于 2012-12-07T20:39:55.610 に答える