[英]In Gtk#, how do I reset a timer that was set with GLib.Timeout.Add?
我想在未編輯2秒后保存小部件的狀態。 現在,我的代碼看起來像這樣:
bool timerActive = false;
...
widget.Changed += delegate {
if (timerActive)
return;
timerActive = true;
GLib.Timeout.Add (2000, () => {
Save ();
timerActive = false;
return false;
});
};
如果一個計時器已在運行,則會保留新計時器,但不會重置已在運行的計時器。 我查看了文檔,似乎無法找到實現這一目標的好方法。 如何重置計時器?
我相信你可以使用GLib.Source.Remove來刪除當你需要重新初始化計時器時由GLib.Timeout.Add返回給你的事件源。 請查看下面的代碼是否適合您:
private uint _timerID = 0;
widget.Changed += delegate
{
if (_timerID>0)
{
GLib.Source.Remove(_timerID);
_timerID = 0;
}
_timerID = GLib.Timeout.Add (2000, () =>
{
Save();
_timerID = 0;
return false;
});
};
作為替代方案,您可以使用System.Timers.Timer對象。 像這樣的Smth:
System.Timers.Timer _timer = null;
widget.Changed += delegate
{
if (_timer==null)
{
_timer = new Timer(5000);
_timer.AutoReset = false;
_timer.Elapsed += delegate
{
Save();
};
_timer.Start();
}
else
{
_timer.Stop();
_timer.Start();
}
};
希望這有幫助,問候
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.