web-dev-qa-db-ja.com

実行中のプログラムで1秒待ちます

dataGridView1.Rows[x1].Cells[y1].Style.BackColor = System.Drawing.Color.Red;
System.Threading.Thread.Sleep(1000);

©このコードでグリッドセルを印刷する前に1秒待機したいのですが、動作しません。私に何ができる?

74
Selçuklu Ebrar

一時停止していますが、セルに赤い色が表示されていませんか?これを試して:

dataGridView1.Rows[x1].Cells[y1].Style.BackColor = System.Drawing.Color.Red;
dataGridView1.Refresh();
System.Threading.Thread.Sleep(1000);
127
Matt Dawdy

個人的には、Thread.Sleepは貧弱な実装だと思います。 UIなどをロックします。待機してから起動するので、個人的にはタイマーの実装が好きです。

使用法:DelayFactory.DelayAction(500, new Action(() => { this.RunAction(); }));

//Note Forms.Timer and Timer() have similar implementations. 

public static void DelayAction(int millisecond, Action action)
{
    var timer = new DispatcherTimer();
    timer.Tick += delegate

    {
        action.Invoke();
        timer.Stop();
    };

    timer.Interval = TimeSpan.FromMilliseconds(millisecond);
    timer.Start();
}
26
Mark Rowe

タイマーを使用した待機機能、UIロックなし。

public void wait(int milliseconds)
    {
        System.Windows.Forms.Timer timer1 = new System.Windows.Forms.Timer();
        if (milliseconds == 0 || milliseconds < 0) return;
        //Console.WriteLine("start wait timer");
        timer1.Interval = milliseconds;
        timer1.Enabled = true;
        timer1.Start();
        timer1.Tick += (s, e) =>
        {
            timer1.Enabled = false;
            timer1.Stop();
            //Console.WriteLine("stop wait timer");
        };
        while (timer1.Enabled)
        {
            Application.DoEvents();
        }
    }

使用法:待機する必要があるコード内にこれを配置するだけです:

wait(1000); //wait one second
8
Said

短い時間であれば、忙しい待機は深刻な欠点にはなりません。私の場合、コントロールをフラッシュすることでユーザーに視覚的なフィードバックを与える必要がありました(これはクリップボードにコピーできるチャートコントロールで、背景を数ミリ秒変更します)。このようにうまく機能します:

using System.Threading;
...
Clipboard.SetImage(bm);   // some code
distribution_chart.BackColor = Color.Gray;
Application.DoEvents();   // ensure repaint, may be not needed
Thread.Sleep(50);
distribution_chart.BackColor = Color.OldLace;
....
2
ChrisW

dataGridView1.Refresh();を使用:)

1
Coder SAJDFJF

この機能を試してください

public void Wait(int time) 
{           
    Thread thread = new Thread(delegate()
    {   
        System.Threading.Thread.Sleep(time);
    });
    thread.Start();
    while (thread.IsAlive)
    Application.DoEvents();
}

関数を呼び出す

Wait(1000); // Wait for 1000ms = 1s
0
Savaş SERTER

ここで間違っていたのは注文だけだったように感じます、Selçukluはグリッドに入力する前にアプリを1秒間待って欲しいので、Sleepコマンドはfillコマンドの前に来るはずです。

    System.Threading.Thread.Sleep(1000);
    dataGridView1.Rows[x1].Cells[y1].Style.BackColor = System.Drawing.Color.Red;
0
Colin D