2012-04-21 3 views
1

C#에서 일부 코드를 실행하고 몇 초 기다렸다가 계속 진행할 수 있습니까? 타이머를 사용할 수는 있지만 쉽고 빠른 방법이 있습니까? 일괄처럼 당신이 할 수있는 : 나는 윈폼을 위해 그것을 필요로하기 때문에,C#을 제외하고 "ping localhost ..."와 같은 코드 종류를 지연시키는 방법

echo Hello 
ping localhost -n 10 > nul 
echo World 
pause > nul 

그래서 나는 C#에서이 작업을 수행 할 수 있으며,이 윈폼하거나 콘솔을 사용하여 작동합니다 ... 은 [편집] 나는이 만 필요 일시 중지하는 한 가지 방법이지만 나머지 앱은 계속 진행됩니다. 예를 들어, 버튼이 있으면 클릭하고 5 초 후 호출 된 나머지 메소드를 계속 진행합니다. 그러나 그 동안에도 다른 버튼을 계속 누를 수 있습니까?

답변

1

Begininvoke?

new Action(() => { 
    Console.WriteLine("Waiting..."); 
    Thread.Sleep(10000); 
    Console.WriteLine("Over"); 
}).BeginInvoke(null, null); 
+0

완벽하게 작동합니다. – Oztaco

1

예 - 원하는 밀리 초를 전달하여 Thread.Sleep으로 전화 할 수 있습니다. 실행중인 코드가 일시 중지되고 경과 한 밀리 초가 경과 한 후 실행을 다시 시작합니다. 이 기술은 보편적입니다 - winforms 또는 콘솔 응용 프로그램에서 작동합니다.

winforms에서 UI 스레드에서 Thread.Sleep을 호출하면 안됩니다. 대신, 지연 시간과 지연 시간 후에 메소드를 두 개로 나눠야합니다. Sleep으로 스레드를 생성하고 Invoke을 통해 코드의 두 번째 부분을 호출해야합니다.

// This is your old method 
void OnClick(object sender, EventArgs e) { 
    // ... before the delay 
    Thread.Sleep(1000); 
    // After the delay 
} 

// This is your new method 
void OnClick(object sender, EventArgs e) { 
    // ... before the delay 
    new Thread(() => {Thread.Sleep(1000); Invoke(Continuation); }).Start(); 
} 

void Continuation() { 
    // After the delay 
} 
+0

더 좋은 방법은 전체 응용 프로그램을 고정시키는 것입니다. 버튼 하나를 클릭하고 5 초를 기다렸다가 나머지 방법을 계속하는 것과 같이 하나의 기능을 지연 시키면되지만 다른 버튼과 물건을 계속 밀어 넣을 수 있습니까? – Oztaco

+0

@ leaf68 UI 스레드에서 지연을 수행하면 응용 프로그램이 정지됩니다. 당신은 스레드를 생성하고'Invoke'를 통해 연속체를 다시 호출합니다. 백그라운드 스레드에서 UI 스레드로 통신하는 방법의 예는 프로그램 [이 예제에서는] (http://www.yoda.arachsys.com/csharp/threads/winforms.shtml)을 참조하십시오. – dasblinkenlight

+0

작동하지만, 내 방법을 분할하지 않으려 고했는데 타이머를 사용하지 않으려 고 한 이유는 무엇입니까 – Oztaco