2012-08-29 3 views
0

방 앞에 나는 패널이있다. 해당 패널에 점유 시간이 표시됩니다 (예 : 14:00 - 15:30). 누군가가 그 방을 그 방을 사용하기를 원하면 그는 패널에서 CHECK_IN 버튼을 눌러야합니다. 그래서 시스템은 룸에 누군가가 있다는 것을 압니다. 이제 아무도 14 시부 터 20 분이 지나도 버튼을 사용하지 않으면 점유 시간을 취소해야합니다.예를 들어 20 분 후에 SQL 쿼리를 실행하는 타이머를 만드시겠습니까?

나는 취소를위한 쿼리를 이미 작성했습니다. 하지만 20 분 후에 쿼리를 실행하는 타이머와 비슷한 것이 필요합니다. 어떻게 할 수 있습니까? 사전

답변

4

사용하십시오 TimerTimer 개체를 사용하여 콜백에서 취소 코드를 삽입 할 수있다.

public void StartCheckin(int dueTime) 
{ 
    var t = new Timer(new TimerCallback(CancelCheckin)); 
    t.Change(dueTime, Timeout.Infinite); 
} 

private void CancelCheckin(object state) 
{ 
    // cancel checkin 
    // dispose of timer 
    ((Timer)state).Dispose(); 
} 
+1

't'는 필드로 선언해야합니다. 왜냐하면 20 분이 오기 전에 GC가 오래 걸리기 때문입니다. –

+0

@James'StartChecking' 호출 등을 넣을 위치에 대해 설명하면 좋을 것입니다. –

+0

@the_joric이 상황에서는 타이머가 콜백에 의해 참조 될 때 활성 상태로 유지됩니다. Timer는 활성 상태 일 때 GC하지 않습니다. – James