programing

실행중인 프로그램에서 1 초간 기다리십시오.

nasanasas 2020. 10. 7. 07:43
반응형

실행중인 프로그램에서 1 초간 기다리십시오.


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

이 코드를 사용하여 그리드 셀을 인쇄하기 전에 1 초 동안 기다리려고하는데 작동하지 않습니다. 어떡해?


일시 중지되어 있지만 빨간색이 셀에 나타나지 않습니까? 이 시도:

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

개인적으로 나는 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();
}

타이머를 사용하는 대기 기능, 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

바쁜 대기는 짧은 경우 심각한 단점이되지 않습니다. 제 경우에는 컨트롤을 플래시하여 사용자에게 시각적 피드백을 제공해야했습니다 (클립 보드에 복사 할 수있는 차트 컨트롤로, 몇 밀리 초 동안 배경이 변경됨). 다음과 같이 잘 작동합니다.

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;
....

사용 dataGridView1.Refresh();:)


이 기능을 사용해보십시오

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

I feel like all that was wrong here was the order, Selçuklu wanted the app to wait for a second before filling in the grid, so the Sleep command should have come before the fill command.

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

Maybe try this code:

void wait (double x) {
    DateTime t = DateTime.Now;
    DateTime tf = DateTime.Now.AddSeconds(x);

    while (t < tf) {
        t = DateTime.Now;
    }
}

참고URL : https://stackoverflow.com/questions/10458118/wait-one-second-in-running-program

반응형