我想在未编辑2秒后保存小部件的状态。现在,我的代码看起来像这样:
bool timerActive = false;
...
widget.Changed += delegate {
if (timerActive)
return;
timerActive = true;
GLib.Timeout.Add (2000, () => {
Save ();
timerActive = false;
return false;
});
};
如果一个新计时器已在运行,则会保留新计时器,但不会重置已在运行的计时器。我查看了文档,似乎无法找到实现这一目标的好方法。如何重置计时器?
答案 0 :(得分:4)
我相信你可以使用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();
}
};
希望这有帮助,尊重