【问题标题】:Word Interop suddenly taking a very long time to quit wordWord Interop 突然花了很长时间才退出 word
【发布时间】:2019-11-05 19:52:43
【问题描述】:

突然来电:

((Microsoft.Office.Interop.Word._Application)word).Quit(SaveChanges: Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges, OriginalFormat: Type.Missing);

需要永远(30-60 秒),而不是最多 3 秒。 当我用它创建pdf时不会发生这种情况,但是当我创建docx时。我还没有尝试过所有不同的选项......

最近可能与新版本的 Windows 有关。当我看到有人在不到 2 个月前更新了一篇关于 word interop 的旧帖子时,我的怀疑变得更加强烈: LINK 见:“2019-09-29 编辑” 我没有尝试过他们在那里写的任何东西。主要是因为我不明白,以前也没有必要。

对我来说,问题出在 2 台 Windows 10 机器上。我的桌面在一周前已经更新到 1903,所以可能是这样。它在我运行 word 2016 的 Windows 服务器上仍然可以正常工作。 我的台式机运行word 365,但我朋友的surface pro 3也是如此,他没有问题。不知道他最近有没有更新他的windows10。

有趣的是,当我用一个空文档正常打开 word 然后再次关闭它时,我遇到了同样的问题。 windows关闭了,但是任务管理器word进程需要很长时间才能关闭,所以ofc让我怀疑。然后我尝试使用设置一词,当我关闭“此应用程序启动时显示开始画面”时,它立即开始关闭该过程。 Ofc 我然后虽然:“太好了,问题解决了”,但没有。使用互操作时仍然存在同样的问题。我尝试通过添加以下行来模拟“显示开始屏幕”的关闭: word.ShowStartupDialog = false; 那只是抛出一个期望,告诉我 ShowStartupDialog 在没有打开窗口时不可用。可能是因为我在不可见模式下运行 word。

我最终通过将退出代码放在这样的线程中来解决问题,最后:

System.Threading.Thread t = new System.Threading.Thread(() =>
{               
    ((Microsoft.Office.Interop.Word._Application)word).Quit(SaveChanges: 
    Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges, OriginalFormat: Type.Missing);             
});

t.IsBackground = true;
t.Start();

然后我可以继续在程序中工作,甚至可以再次调用相同的函数来创建另一个文档。然后它将在旧进程仍在关闭时启动另一个进程。我只是尝试同时关闭3个,这对我来说已经足够了。每个实例也占用了相当多的 cpu 25+%!我的电脑不是新的,但它能够很好地运行 CS GO,所以我真的认为这应该是足够的机器功率:)。

请帮忙找出这个问题的真正原因和解决方案,这样我就可以回到我的原始代码,它已经工作了 4 年。

【问题讨论】:

  • instead of max 3 secs 这个文档在哪里?
  • 办公室 COM 互操作至少有十年的历史,今天仍然无法使用。您是否有机会将此案例限制为仅接受新格式 (.docx)?
  • The office COM interop is at least a decade too old to still be used today 基于什么事实,你为什么不能使用呢?老实说,我经常使用它并且没有任何问题;基于较轻的工作负荷。是的,还有其他库,但是如果当前的开发此时阻止使用其他库怎么办?
  • Quit() 只能启动关闭,但当仍有实时互操作接口引用时,Word 无法退出。赶时间需要 GC.Collect()。 Look here 了解重要细节。理想情况下,您根本不必这样做,只需使用一个 Word 实例即可完成所有工作,并在工作完成后退出程序。
  • dotnetfiddle.net/7iT6J7 表明即使 COM 引用仍然存在,Quit 也会关闭 Word(将其复制并在本地粘贴到 .NET Framework 控制台应用程序中以运行它)。这与我使用 Word 的经验一致(Excel 行为不同)。

标签: c# ms-word interop exit


【解决方案1】:

事实证明,这个问题与互操作无关,所以我不必更改任何代码。如果我在 word 中打开任何 docx 文件(本地或非本地)然后再次将其关闭,则 Microsoft Word(32 位)进程需要很长时间才能关闭。然后,如果我在 Word 中打开左下角的“帐户”选项卡并退出我的帐户。问题消失了……天哪,我整天都在考虑这样做,但是不,就是这样。卫生部。对不起各位。

经过一些测试,通过打开几个文档,突然又开始花费更长的时间。显然它再次自动让我登录。再次注销后,它再次解决了问题,所以我相信了。 Ofc 我不想在我的个人计算机上永远保持退出状态,然后我再次手动登录,是的,它需要更长的时间,但这次不会更长。也许3-4秒。还是比20-30好。 Onedrive 似乎在“连接的服务”下启动并运行。

【讨论】:

    猜你喜欢
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多