【问题标题】:Vala, GTK :How do I perform UI operations from a different thread?Vala, GTK:如何从不同的线程执行 UI 操作?
【发布时间】:2018-03-22 12:16:47
【问题描述】:

我有一台服务器正在侦听在不同线程中运行的端口上的消息。现在,一旦它收到一条消息,我需要将其显示在文本框中。

  1. 是否有类似 runOnUiThread()(在 android 中)或 Vala、GTK 中的等效方法?

  2. 否则有什么替代方案?

【问题讨论】:

    标签: gtk vala


    【解决方案1】:

    使用GLib.Idle.add 在事件调度线程中安排一些事情:

    Idle.add(() => {
      textbox.Entry = "foo";
      return Source.REMOVE;
    });
    

    【讨论】:

      【解决方案2】:

      与许多其他操作系统相比,显然您可以从非 UI 线程执行 UI 操作。我可以成功地从服务器线程更改Entry 的文本。不确定这是否被推荐。

      【讨论】:

      • 不是。 GTK+ 不是线程安全的。您应该使用g_idle_add 注册一个回调,以便从主线程调用一些代码。不应在它之外完成任何 UI 工作。
      • 这最终会咬你。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多