如何在单击按钮时异步运行vala中的函数

时间:2014-09-02 23:30:38

标签: multithreading asynchronous gtk vala

我刚刚开始使用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);
    });

1 个答案:

答案 0 :(得分:3)

在Gtk +中,只有一个线程处理GUI事件。如果要执行后台进程,可以创建线程或拆分任务并在主循环中处理它。我推荐后者。

要启动流程,请考虑GLib.Process.spawn_async。要知道进程何时退出,您必须使用ChildWatch安装处理程序。

ChildWatch的示例可能就是您想要的。