2014-09-02 75 views
1

我刚开始接触瓦拉并纷纷创出障碍如何运行在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); 
    }); 

回答

3

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

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

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