이 함수는 GTK #에서 타이머를 시작합니다. 내가 원하는대로 시작하고 멈출 수 있기를 바란다.중지/다시 시작 GLib.Timeout.Add();
void StartClock()
{
GLib.Timeout.Add (1000, new GLib.TimeoutHandler (AskPython));
}
이 함수는 GTK #에서 타이머를 시작합니다. 내가 원하는대로 시작하고 멈출 수 있기를 바란다.중지/다시 시작 GLib.Timeout.Add();
void StartClock()
{
GLib.Timeout.Add (1000, new GLib.TimeoutHandler (AskPython));
}
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;
당신은 그 AskPython
함수 내에서 확인할 수 있습니다 비활성화가 설정되어있는 경우 아무것도하지 않는 전역 변수를 사용할 수 있습니다.
그렇지 않으면 GLib에 적합한 방법이라고 생각합니다. AskPython
은 false
을 반환해야합니다.
이 함수는 False를 반환 할 때까지 반복적으로 호출됩니다.이 시점에서 시간 제한은 자동으로 삭제되고 함수는 다시 호출되지 않습니다.
참조 : 당신이 다시 활성화하려면가 glib.timeout_add
그런 GLib.Timeout.Add
를 호출합니다.