我最近在 Word 对象模型的性能方面遇到了一些问题。在我为 Word 编写的加载项中,我需要解析文档中的所有单词并替换其中的一些单词,或者向用户询问具有多个替换的单词。我知道一次向 Word 询问所有文档文本内容然后处理它并再次将其全部放回会更快,但这不适合我的加载项,因为我需要访问范围表示具有多个替换词的对象,以便我可以以某种方式在文档中标记它们,并向用户提供一个工具提示,他可以从中选择他想要的替换词。
所以目前我想到的唯一一个巨大的速度改进是多线程,因为大多数人已经拥有双核或更好的。问题是您在 Google 上找到的所有内容都表明在 Office 中使用多线程是一件非常糟糕的事情。
那么,有没有人设法以一种在大多数情况下都能奏效的方式做到这一点?我的意思是,如果它也能在其他 PC 上运行,那么开发的 PC?
第二个问题是:有人知道为什么 Microsoft 将 Word (Office) 对象模型限制为单线程吗?只是出于好奇:)
最佳答案
Office 中的多线程应该可以正常工作。这是 Microsoft 的一篇文章,介绍了如何做到这一点:
Walkthrough: Multithreading with the BackgroundWorker Component (C# and Visual Basic)
Office 对象模型不是单线程的,而是单线程单元 (STA)。这实际上是所有 VB.Net 程序的默认状态(C# 默认为 MTA)。要了解有关 STA 与 MTA 的更多信息,请查看以下链接:
关于c# - 从多个线程访问 word 文档的单词列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5350087/