【问题标题】:How do I run function in vala asynchronously when a button is clicked单击按钮时如何在vala中异步运行函数
【发布时间】:2023-03-31 07:36:01
【问题描述】:

我刚从 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);
    });

【问题讨论】:

  • 你有没有使用儿童手表的例子?

标签: multithreading asynchronous gtk vala


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-25
    • 2023-03-31
    • 2021-09-05
    • 1970-01-01
    • 2023-03-06
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多