我刚刚开始使用Vala并遇到了障碍
当我尝试在按钮上运行大型功能时,它会锁定整个应用程序直到完成
如何将类似下面的内容放入线程或给它一个异步回调?
var btn = new Gtk.Button();
btn.label = "Run something massive!";
btn.clicked.connect (() => {
Process.spawn_command_line_sync("gksudo apt-get update",
out ls_stdout,
out ls_stderr,
out ls_status);
btn.set_sensitive (false);
});
答案 0 :(得分:3)
在Gtk +中,只有一个线程处理GUI事件。如果要执行后台进程,可以创建线程或拆分任务并在主循环中处理它。我推荐后者。
要启动流程,请考虑GLib.Process.spawn_async。要知道进程何时退出,您必须使用ChildWatch安装处理程序。
ChildWatch
的示例可能就是您想要的。