diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 05b1d38..2180616 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -1769,32 +1769,40 @@ fn refresh_agent_config_status_cache( } #[tauri::command] -fn get_agent_config_statuses( +async fn get_agent_config_statuses( app: tauri::AppHandle, - gui_config_state: tauri::State<'_, GuiConfigState>, - cache: tauri::State<'_, AgentConfigStatusCache>, ) -> Result, String> { - { - let _refresh_guard = cache - .refresh_lock - .lock() - .map_err(|_| "智能体配置状态刷新锁已损坏".to_string())?; - let config = gui_config_state.snapshot()?; - let port = config.port; - if let Some(statuses) = cache.get(port, effective_agent_api_key(&config))? { - return Ok(statuses); + tauri::async_runtime::spawn_blocking(move || { + let gui_config_state = app.state::(); + let cache = app.state::(); + { + let _refresh_guard = cache + .refresh_lock + .lock() + .map_err(|_| "智能体配置状态刷新锁已损坏".to_string())?; + let config = gui_config_state.snapshot()?; + let port = config.port; + if let Some(statuses) = cache.get(port, effective_agent_api_key(&config))? { + return Ok(statuses); + } } - } - refresh_agent_config_status_cache(&app, gui_config_state.inner(), cache.inner()) + refresh_agent_config_status_cache(&app, gui_config_state.inner(), cache.inner()) + }) + .await + .map_err(|error| format!("智能体检测后台任务失败: {error}"))? } #[tauri::command] -fn refresh_agent_config_statuses( +async fn refresh_agent_config_statuses( app: tauri::AppHandle, - gui_config_state: tauri::State<'_, GuiConfigState>, - cache: tauri::State<'_, AgentConfigStatusCache>, ) -> Result, String> { - refresh_agent_config_status_cache(&app, gui_config_state.inner(), cache.inner()) + tauri::async_runtime::spawn_blocking(move || { + let gui_config_state = app.state::(); + let cache = app.state::(); + refresh_agent_config_status_cache(&app, gui_config_state.inner(), cache.inner()) + }) + .await + .map_err(|error| format!("智能体检测后台任务失败: {error}"))? } #[tauri::command] diff --git a/src/pages/AgentsPage.tsx b/src/pages/AgentsPage.tsx index ad4dfc4..ebeadf6 100644 --- a/src/pages/AgentsPage.tsx +++ b/src/pages/AgentsPage.tsx @@ -651,7 +651,7 @@ export function AgentsPage() { void listen('config-files-changed', () => { if (disposed) return; setDetectionError(''); - void loadStatuses(true).catch((requestError) => { + void loadStatuses().catch((requestError) => { if (!disposed) setDetectionError(String(requestError)); }); }).then((unlisten) => {