2014-07-11 46 views
1

이 함수는 GTK #에서 타이머를 시작합니다. 내가 원하는대로 시작하고 멈출 수 있기를 바란다.중지/다시 시작 GLib.Timeout.Add();

void StartClock() 
{ 
    GLib.Timeout.Add (1000, new GLib.TimeoutHandler (AskPython)); 
} 

답변

2

Glib timeout은이를 지원하지 않지만 여기에 Microsoft의 타이머 클래스와 비슷한 타이머 클래스가 있습니다.

public delegate void TimerElapsedHandler (object sender, TimerElapsedEventArgs args); 

public class TimerElapsedEventArgs : EventArgs 
{ 
    DateTime signalTime; 

    public TimerElapsedEventArgs() { 
     signalTime = DateTime.Now; 
    } 
} 

public class Timer 
{ 
    private bool _enabled; 
    public bool enabled { 
     get { 
      return _enabled; 
     } 
     set { 
      _enabled = value; 
      if (_enabled) 
       Start(); 
      else 
       Stop(); 
     } 
    } 
    protected uint timerId; 

    public event TimerElapsedHandler TimerElapsedEvent; 
    public uint timerInterval; 
    public bool autoReset; 

    public Timer() : this (0) { } 

    public Timer (uint timerInterval) { 
     _enabled = false; 
     this.timerInterval = timerInterval; 
     autoReset = true; 
     timerId = 0; 
    } 

    public void Start() { 
     _enabled = true; 
     timerId = GLib.Timeout.Add (timerInterval, OnTimeout); 
    } 

    public void Stop() { 
     _enabled = false; 
     GLib.Source.Remove (timerId); 
    } 

    protected bool OnTimeout() { 
     if (_enabled) { 
      if (TimerElapsedEvent != null) 
       TimerElapsedEvent (this, new TimerElapsedEventArgs()); 
     } 
     return _enabled & autoReset; 
    } 
} 

사용법 :

Timer t = new Timer (1000); 
t.TimerElapsedEvent += (sender, args) => { 
    Console.WriteLine (args.signalTime.ToString()); 
}; 
t.enabled = true; 
0
  • 당신은 그 AskPython 함수 내에서 확인할 수 있습니다 비활성화가 설정되어있는 경우 아무것도하지 않는 전역 변수를 사용할 수 있습니다.

  • 그렇지 않으면 GLib에 적합한 방법이라고 생각합니다. AskPythonfalse을 반환해야합니다.

    이 함수는 False를 반환 할 때까지 반복적으로 호출됩니다.이 시점에서 시간 제한은 자동으로 삭제되고 함수는 다시 호출되지 않습니다.

    참조 : 당신이 다시 활성화하려면glib.timeout_add

    그런 GLib.Timeout.Add를 호출합니다.