rust - 如何在不退出程序/进程的情况下关闭由 winit 启动的窗口?

标签 rust winit

我在 Rust 中使用 winit crate 创建一个新窗口。我的程序最初创建了一个 CLI,GUI 窗口是根据用户在 CLI 中的可选输入创建的。如何在不退出进程并完全关闭程序的情况下关闭新创建的窗口。

我看到的文档和例子都使用ControlFlow::Exit来处理CloseRequested事件,但是它从整个程序中退出;我只想关闭创建的窗口并继续运行 CLI 中的其余代码。如果有特定于操作系统的命令,我将针对 Windows 操作系统。

最佳答案

关闭窗口,只需放下Window 对象即可。

但是,我怀疑您可能还希望退出事件循环。这在所有平台上都是不可能的,这就是为什么您不会经常看到涉及它的文档。要运行事件循环并有机会退出它,请使用 winit::platform::run_return::EventLoopExtRunReturn::run_return() ,这是仅在支持从事件循环返回的平台(包括 Windows)上实现的特征。在 run_return() 中,使用事件处理程序中的 ControlFlow::Exit 会将控制权返回给调用函数,而不是退出进程。

你也可以做这些事情之一而不是使用 run_return():

  • 构造您的程序,使其在关闭窗口后在 winit 事件循环中使用 CLI 界面继续运行。
  • 在不同的线程上运行 CLI 交互。

关于rust - 如何在不退出程序/进程的情况下关闭由 winit 启动的窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74175743/

相关文章:

rust - 什么是类型状态?

dynamic - 为什么特征对象 vtables 包含大小和对齐方式?

testing - 使用带有 actix-web 的工作 POST 路由的测试超时

rust - 如何使用 winit rust crate 中的 raw_window_handle() 方法?

rust - 为什么我仍然可以使用 `move` 闭包捕获的变量?

rust - 如何使返回 XMLError 的方法与 anyhow::Error 兼容?