我正在使用winit crate in Rust创建一个新窗口.我的程序最初创建一个CLI,并且基于用户在CLI中的可选输入来创建图形用户界面窗口.如何在不退出进程和完全关闭程序的情况下关闭新创建的窗口.

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

推荐答案

close the window,只需放下Window对象即可.

然而,我怀疑您可能也在考虑exit the event loop.,这并不是在所有平台上都可能的,这就是为什么您不会经常看到文档介绍它的原因.要运行事件循环并有机会退出它,请使用winit::platform::run_return::EventLoopExtRunReturn::run_return(),这是一个仅在支持从事件循环返回的平台(包括Windows)上实现的特性.在这run_return()中,从事件处理程序使用ControlFlow::Exit将把控制权返回给调用函数,而不是退出进程.

您也可以执行以下操作之一,而不是使用run_return():

  • 设置程序的 struct ,使其在关闭窗口后继续在winit事件循环内使用CLI界面运行.
  • 在不同的线程上运行CLI交互.

Rust相关问答推荐

捕获Rust因C++异常而产生panic

将此字符串转换为由空格字符分隔的空格

如何容器化Linux上基于Rust的Windows应用程序的编译过程?

如何使用Match比较 struct 中的值

rust 迹-内存管理-POP所有权-链表

使用铁 rust S还原对多个数组执行顺序kronecker积

创建Rust中元对象协议的动态对象 Select /重新分配机制

将serde_json读入`VEC<;T&>;`( rust 色)时出现问题

为什么Rust不支持带关联常量的特征对象?

为什么`str`类型可以是任意大小(未知大小),而`string`类型的大小应该是已知的?

为什么AsyncRead在Box上的实现有一个Unpin特征绑定?

装箱特性如何影响传递给它的参数的生命周期 ?(举一个非常具体的例子)

write_buffer 不写入缓冲区而是输出零 WGPU

分配给下划线模式时会发生什么?

如何在 Rust 中将 bson::Bson 转换为 Vec

在运行时在 Rust 中加载字体

为什么指定生命周期让我返回一个引用?

如何构建包含本地依赖项的 docker 镜像?

为什么 Rust 中的关联类型需要明确的生命周期注释?

您不能borrow 对只读值的可变引用