谁能提供一个tauri+rust +vue 监听程序关闭时调用方法的代码或者思路吗?
我需要在tauri程序关闭时调用cmd去kill一个服务,但我一直找不到这个时机,请求帮助
回答:
使用 rust Tauri 自带的方法
pub fn on_window_event<F: Fn(GlobalWindowEvent<R>) + Send + Sync + 'static>( self,
handler: F
) -> Self
tauri::Builder::default() .on_window_event(|event| {
match event.event() {
tauri::WindowEvent::CloseRequested { api, .. } => {
//阻止默认关闭
api.prevent_close();
....
进行你的操作
....
// let window = event.window().clone();
// window.close();
}
_ => {} //todo
}
})
回答:
Hmm,或许你应该提供一下你之前都做过哪些尝试,这样可能更容易找到能帮到你的关键点。主要是我也还没有用 tauri 封装过完整的应用,我只能通过文档来猜测一下或许可用的方案。
首先应该是利用 event
模块来监听和程序关闭相关的事件吧:https://tauri.app/v1/api/js/event,看起来比较接近的事件有两个:
从名字上推测应该还是 WINDOW_DESTROYED
事件更符合你需求的场景。
回调触发之后就通过 tauri.invoke
方法来跟后端通信:https://tauri.app/v1/api/js/tauri#invoke
那么后端这边就是要写一个 Rust 函数来具体执行 kill process 逻辑了:
use port_killer::{kill};#[tauri::command]
fn kill_my_service() {
kill(8080)
}
上面这个例子随便写的,具体要怎么 kill 你的服务这就看你的要求了
相关的内容这里会比较全面一些:Calling Rust from the frontend
回答:
你可以在 rust 中监听以下两个事件,具体用哪个看你的需求(我也没用过这两个事件)。
https://docs.rs/tauri/1.3.0/tauri/enum.RunEvent.html
最后,再提供个示例代码,不过我这个是监听 ThemeChanged 事件的。
fn main() { tauri::Builder::default()
.setup(|app| {
let window = app.get_window("main").unwrap();
window_shadows::set_shadow(&window, true).expect("不支持为该平台添加窗口效果!");
let tray_menu = tauri::SystemTrayMenu::new()
.add_item(CustomMenuItem::new("visible".to_string(), "显示/隐藏"))
.add_item(CustomMenuItem::new("center".to_string(), "居中"))
.add_item(CustomMenuItem::new("close".to_string(), "关闭"));
let tray_handle = tauri::SystemTray::new()
.with_menu(tray_menu)
.build(app)
.unwrap();
change_icon(window.theme().unwrap(), window, tray_handle);
Ok(())
})
// .system_tray()
.on_system_tray_event(handle_tray_event)
.invoke_handler(tauri::generate_handler![open_in_private])
.plugin(tauri_plugin_store::Builder::default().build())
.build(tauri::generate_context!())
.expect("初始化程序时出错!")
.run(|app_handle, event| match event {
tauri::RunEvent::WindowEvent { event, .. } => match event {
tauri::WindowEvent::ThemeChanged(theme) => change_icon(
theme,
app_handle.get_window("main").unwrap(),
app_handle.tray_handle(),
),
_ => {}
},
_ => {}
});
}
以上是 谁能提供一个tauri+rust +vue 监听程序关闭时调用方法的代码或者思路吗? 的全部内容, 来源链接: utcz.com/p/934465.html