From de9056739b15874b8471dc4573535a3121d699e0 Mon Sep 17 00:00:00 2001 From: CJKmkp <2564608840@qq.com> Date: Sat, 17 Jan 2026 20:23:33 +0800 Subject: [PATCH] =?UTF-8?q?improve:PPT=E7=BF=BB=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ink Canvas/Helpers/PPTManager.cs | 156 +++++++++++++++++-------------- 1 file changed, 88 insertions(+), 68 deletions(-) diff --git a/Ink Canvas/Helpers/PPTManager.cs b/Ink Canvas/Helpers/PPTManager.cs index ac719466..d6f707f3 100644 --- a/Ink Canvas/Helpers/PPTManager.cs +++ b/Ink Canvas/Helpers/PPTManager.cs @@ -913,108 +913,128 @@ namespace Ink_Canvas.Helpers public bool TryNavigateNext() { - object slideShowWindows = null; - object slideShowWindow = null; - object view = null; try { if (!IsConnected || !IsInSlideShow || PPTApplication == null) return false; if (!Marshal.IsComObject(PPTApplication)) return false; - slideShowWindows = PPTApplication.SlideShowWindows; - if (slideShowWindows != null) + // 在新线程中执行翻页操作,避免等待动画完成 + new Thread(() => { - dynamic ssw = slideShowWindows; - slideShowWindow = ssw[1]; - if (slideShowWindow != null) + try { - dynamic sswObj = slideShowWindow; - sswObj.Activate(); - view = sswObj.View; - if (view != null) + object slideShowWindows = PPTApplication.SlideShowWindows; + if (slideShowWindows != null) { - dynamic viewObj = view; - viewObj.Next(); - return true; + dynamic ssw = slideShowWindows; + object slideShowWindow = ssw[1]; + if (slideShowWindow != null) + { + dynamic sswObj = slideShowWindow; + try + { + sswObj.Activate(); + } + catch { } + try + { + object view = sswObj.View; + if (view != null) + { + dynamic viewObj = view; + viewObj.Next(); + } + } + catch { } + SafeReleaseComObject(slideShowWindow); + } + SafeReleaseComObject(slideShowWindows); } } - } - return false; - } - catch (COMException comEx) - { - var hr = (uint)comEx.HResult; - if (hr == 0x8001010E || hr == 0x80004005) - { - DisconnectFromPPT(); - } - LogHelper.WriteLogToFile($"切换到下一页失败: {comEx.Message}", LogHelper.LogType.Error); - return false; + catch (COMException comEx) + { + var hr = (uint)comEx.HResult; + if (hr == 0x8001010E || hr == 0x80004005) + { + DisconnectFromPPT(); + } + LogHelper.WriteLogToFile($"切换到下一页失败: {comEx.Message}", LogHelper.LogType.Error); + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"切换到下一页失败: {ex}", LogHelper.LogType.Error); + } + }).Start(); + return true; } catch (Exception ex) { - LogHelper.WriteLogToFile($"切换到下一页失败: {ex}", LogHelper.LogType.Error); + LogHelper.WriteLogToFile($"启动下一页线程失败: {ex}", LogHelper.LogType.Error); return false; } - finally - { - SafeReleaseComObject(view); - SafeReleaseComObject(slideShowWindow); - SafeReleaseComObject(slideShowWindows); - } } public bool TryNavigatePrevious() { - object slideShowWindows = null; - object slideShowWindow = null; - object view = null; try { if (!IsConnected || !IsInSlideShow || PPTApplication == null) return false; if (!Marshal.IsComObject(PPTApplication)) return false; - slideShowWindows = PPTApplication.SlideShowWindows; - if (slideShowWindows != null) + // 在新线程中执行翻页操作,避免等待动画完成 + new Thread(() => { - dynamic ssw = slideShowWindows; - slideShowWindow = ssw[1]; - if (slideShowWindow != null) + try { - dynamic sswObj = slideShowWindow; - sswObj.Activate(); - view = sswObj.View; - if (view != null) + object slideShowWindows = PPTApplication.SlideShowWindows; + if (slideShowWindows != null) { - dynamic viewObj = view; - viewObj.Previous(); - return true; + dynamic ssw = slideShowWindows; + object slideShowWindow = ssw[1]; + if (slideShowWindow != null) + { + dynamic sswObj = slideShowWindow; + try + { + sswObj.Activate(); + } + catch { } + try + { + object view = sswObj.View; + if (view != null) + { + dynamic viewObj = view; + viewObj.Previous(); + } + } + catch { } + SafeReleaseComObject(slideShowWindow); + } + SafeReleaseComObject(slideShowWindows); } } - } - return false; - } - catch (COMException comEx) - { - var hr = (uint)comEx.HResult; - if (hr == 0x8001010E || hr == 0x80004005) - { - DisconnectFromPPT(); - } - LogHelper.WriteLogToFile($"切换到上一页失败: {comEx.Message}", LogHelper.LogType.Error); - return false; + catch (COMException comEx) + { + var hr = (uint)comEx.HResult; + if (hr == 0x8001010E || hr == 0x80004005) + { + DisconnectFromPPT(); + } + LogHelper.WriteLogToFile($"切换到上一页失败: {comEx.Message}", LogHelper.LogType.Error); + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"切换到上一页失败: {ex}", LogHelper.LogType.Error); + } + }).Start(); + return true; } catch (Exception ex) { - LogHelper.WriteLogToFile($"切换到上一页失败: {ex}", LogHelper.LogType.Error); + LogHelper.WriteLogToFile($"启动上一页线程失败: {ex}", LogHelper.LogType.Error); return false; } - finally - { - SafeReleaseComObject(view); - SafeReleaseComObject(slideShowWindow); - SafeReleaseComObject(slideShowWindows); - } } public bool TryEndSlideShow()