FORGE KUI / docs

窗口、线程与生命周期

先初始化平台,再创建窗口、加载文档并运行事件循环。

版本 3.61.7

窗口启动与文档替换

先初始化平台,再创建窗口、加载文档并运行事件循环。窗口关闭后及时释放宿主资源;不要在文档重载后保留旧元素指针。

UI 线程与回调捕获

UI 操作由主线程处理。网络或文件任务在后台完成后,通过 Platform::postToMainThread 或对应绑定的投递入口回到 UI 线程。回调捕获的对象必须在执行时仍然有效。

本工程的所有权

Window 持有 Document,Document 持有元素。SettingsState 位于事件循环外层栈帧,在 run 返回前保持有效。工程不重新加载文档;若增加页面重载,需要移除旧回调并重新取得元素。

cpp
    reset->addEventListener("click", [&](kui::Event&) {
        name->setValue(state.name);
        notifications->setChecked(state.notifications);
        name->removeAttribute("aria-invalid");
        status->setAttribute("data-state", "idle");
        status->setTextContent(english ? "Restored the last saved values." : "已恢复上次保存的内容。");
    });

异步任务返回界面

任务可以在后台执行,DOM 更新必须回到 UI 线程。

  1. 在 UI 线程读取本次任务需要的值,复制成业务数据。
  2. 后台处理文件、网络或计算,不捕获裸 DOM 指针后直接使用。
  3. 用 Platform::postToMainThread 派发结果;Go/Rust 使用绑定对应入口。
  4. 结果到达时确认窗口和页面仍有效;已关闭或切换页面的任务应丢弃结果。

生命周期故障

按现象缩小范围,再修改对应文件。

生命周期故障
现象检查与处理
重载后点击崩溃重新查询节点、重建监听器;不要沿用旧文档的元素地址。
关闭后仍有回调取消任务或使回调检查有效性;移除长期监听与计时器。
界面偶尔卡住检查 UI 回调是否执行同步 I/O,确认消息循环持续运行。

文档有误或遗漏?

反馈此页问题 →