2012-04-19 2 views
0

특정 (비정규) 시간 간격 후에 다른 키를 활성 창에 보내는 Windows Form App을 작성하려고합니다.특정 시간 간격을두고 코드를 실행하면 C# .NET

예를 들어, 버튼을 누르면 프로그램은 3 초 동안 기다린 다음 활성 창에 "H"를 보냅니다. 1 초 이상 지나면 "E"를 전송하고 또 다른 두 번째 후에는 "Y"를 보냅니다.

하지만이하려고하면

Thread.Sleep(3000); 
SendKeys.Send("H"); 
Thread.Sleep(1000); 
SendKeys.Send("E"); 
Thread.Sleep(1000); 
SendKeys.Send("Y"); 

프로그램 대기 (최소) 3 초 만 전송 다음 두 개의 키 사이에 일시 정지하지 않는 것 같습니다.

Sleep은 주어진 인수만큼 지연을 보장하기 때문에 타이머를 사용하여 비슷한 것을 구현하려고 시도 해왔다. 더 정확한 것이 필요하다. 그러나, 내가 찾은 유일한 예는 일정한 시간 간격 후에 코드를 실행하는 것입니다.

잠을 사용하여 시도한 것을 달성하기 위해 타이머를 사용하는 방법이 있습니까? 아니면 일반적으로 더 나은 방법입니까?

+1

나는 다음주기가 반영 될 때마다 타이머를 재정의 할 수 있다고 생각하십니까? – TGH

답변

1

Send 대신 SendWait을 사용하십시오.

Thread.Sleep(3000); 
SendKeys.SendWait("H"); 
Thread.Sleep(1000); 
SendKeys.SendWait("E"); 
Thread.Sleep(1000); 
SendKeys.SendWait("Y"); 
+0

그 트릭을 할 것으로 보인다. 감사합니다. – jbaby

0

단추 이벤트 핸들러와 Thread.Sleep 호출이 같은 스레드에서 발생합니다. OnClick 처리기가 끝날 때까지받은 키를 처리 할 수 ​​없습니다. 당신의 클릭 핸들러에서

: 다음

Thread t = new Thread(new ThreadStart(sendTheKeys)); 
t.start(); 

그리고 방법

이 키를 보낼 수있는, 그런

private void sendTheKeys() 
{ 
    Thread.Sleep(3000); 
    this.Invoke(new MethodInvoker(()=> {SendKeys.Send('H');})); 
    Thread.Sleep(1000); 

    this.Invoke(new MethodInvoker(()=>{SendKeys.Send("E");})); 

    Thread.Sleep(1000); 
    this.Invoke(new MethodInvoker(() => {SendKeys.Send("Y");})); 
} 

뭔가 당신은 시작한다. 나는 이것을 머리 꼭대기에서 해냈고 스레드 시작 코드의 핵심을 잊어 버렸을 것입니다.

+0

그는 자신의 양식이 아닌 활성 응용 프로그램에 키를 보냅니다. – SimpleVar

관련 문제