我想在将来做一件事,但只有一次。 The docs for GLib.Timeout.Add说“委托被重复调用,直到它返回false
”,所以我返回false
,然后我从glib得到一个错误。
示例代码:
using System;
class foo {
static void Main() {
Gtk.Application.Init();
uint t = GLib.Timeout.Add(1000, () => {
Console.WriteLine("returning false from timeout");
Gtk.Application.Quit();
return false;
});
Console.WriteLine("timeout added with source id = {0}", t);
Gtk.Application.Run();
}
}
示例输出:
$ mono foo.exe
timeout added with source id = 6
returning false from timeout
(foo:19030): GLib-CRITICAL **: Source ID 6 was not found when attempting to remove it
如何在超时后停止重复而不会出现错误?
$ pkg-config --modversion gtk-sharp-3.0
2.99.3
请注意,错误消息显然出现在程序退出处,并且在我的实际程序中,它似乎在gc运行之前不会出现(如果我手动调用gc并等待终结器,我可以在超时后立即获取它)。
答案 0 :(得分:0)
简短的回答,你不能。超时不会重复,因为它已被正确删除。这就是“错误”的来源,因为gtk运行时试图将超时配置两次。这个问题不仅仅是C#gtk实现,它是C gtk +库中的一个错误。有一种方法可以禁止gtk报告错误,但我不知道该怎么做。