2014-09-02 77 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的示例很可能是您想要的。